昨天学了这个东西,学着还模模糊糊的,还有个decode函数,到现在还没弄明白它啥意思。 老师说要理解一个函数,要知道它的what 、where 、why、how
Oracle 函数划分为单行函数和多行函数。
单行函数作用于数据库表的某一行并返回一个值,如字符函数、数字函数、日期函数、转换函数、其他函数。
多行函数基于数据库表多行进行运算,返回一个值,如对多行记录的某个字段进行求和、求最大值运算等。
常用的字符函数
函数 | 功能 | 示例 | 结果 |
INITCAP(char) | 首字母大写 | inticap('hello') | Hello |
Lower(char) | 转换为小写 | lower('FUN') | fun |
UPPER(char) | 转换为大写 | upper('sun') | SUN |
LTRIM(char,set) | 左剪裁 | ltrim('xyzadams','xyz') | adams |
RTRIM(char,set) | 右剪裁 | rtrim('xyzadams','ams') | xyzad |
TRANSLATE(char,form,to) | 按字符翻译 | translate('jack','abcd','1234') | j13k |
REPLACE(char,search_str, replace_str) | 字符串替换 | replace('jack and jue','j','bl') | black and blue |
INSTR(char,substr[,pos]) | 查找字串位置 | instr('worldwide','d') | 5 |
SUBSTR(char,pos,len) | 取子字符串 | substr('abcdefg',3,2) | cd |
CONCAT(char1,char2) | 连接字符串 | concat('Hello','world') | Helloworld |
常用的数字函数
函数 | 功能 | 示例 | 结果 |
ABS(n) | 取绝对值 | abs(-15) | 15 |
CEIL(n) | 向上取整 | ceil(44.778) | 45 |
SIN(n) | 正弦 | sin(0) | 0 |
COS(n) | 余弦 | cos(0) | 1 |
SIGN(n) | 取符号 | sign(-32) | -1 |
FLOOR(n) | 向下取整 | floor(100.2) | 100 |
POWER(m,n) | m的n次幂 | power(4,2) | 16 |
MOD(m,n) | 取余数 | mod(10,3) | 1 |
ROUND(m,n) | 四舍五入 | round(100.256,2) | 100.26 |
TRUNK(m,n) | 截断 | trunk(100.256,2) | 100.25 |
SQRT(n) | 平方根 | sqrt(4) | 2 |
常用的日期函数
函数 | 功能 | 示例 | 结果 |
MONTHS_BETWEEN | 返回两个日期间的月份 | moths_between('04-11月-05','11-1月-01') | 57.7741935 |
ADD_MONTHS | 返回把月份数加到日期上的新日期 |
add_months('06-2月-03',1) add_months('06-2月-03',-1) |
06-3月-03 06-1月-03 |
NEXT_DAY | 返回指定日期后的星期对应的新日期 | next_day('06-2月-03','星期一') | 10-2月-03 |
LAST_DAY | 返回指定日期所在的月的最后一天 | last_day('06-2月-03') | 28-2月-03 |
ROUND | 按指定格式对日期进行四舍五入 |
round(to_date('13-2月-03'),'YEAR') round(to_date('13-2月-03'),'MONTH') round(to_date('13-2月-03'),'DAY') |
01-1月-03 01-2月-03 16-2月-03 |
TRUNC | 对日期按指定方式进行截断 |
trunc(to_date('06-2月-03'),'YEAR') trunc(to_date('06-2月-03'),'YEAR') trunc(to_date('06-2月-03'),'YEAR') |
01-1月-03 01-2月-03 02-2月-03 |
感觉日期函数有几个是很难搞懂的啊,很搞人的啊,下面是我找的几个例子啊!
1。Sysdate当前日期和时间
SQL> Select sysdate from dual;
SYSDATE
----------
21-6月 -05
2。Last_day本月最后一天
SQL> Select last_day(sysdate) from dual;
LAST_DAY(S
----------
30-6月 -05
3。Add_months(d,n)当前日期d后推n个月
用于从一个日期值增加或减少一些月份
date_value:=add_months(date_value,number_of_months)
SQL> Select add_months(sysdate,2) from dual;
ADD_MONTHS
----------
21-8月 -05
4。Months_between(f,s)日期f和s间相差月数
SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))from dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-DD'))
----------------------------------------------------------
-4.6966741
5。NEXT_DAY(d, day_of_week)
返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。
SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual;
NEXT_DAY(T
----------
26-6月 -05
6。current_date()返回当前会话时区中的当前日期
date_value:=current_date
SQL> column sessiontimezone for a15
SQL> select sessiontimezone,current_date from dual;
SESSIONTIMEZONE CURRENT_DA
--------------- ----------
+08:00 13-11月-03
SQL> alter session set time_zone='-11:00' 2 /
会话已更改。
SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ------------------------------------
-11:00 12-11月-03 04.59.13.668000 下午 -11:00
7。current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
21-6月 -05 10.13.08.220589上午 +08:00
8。dbtimezone()返回时区
SQL> select dbtimezone from dual;
DBTIME
------
-08:00
9。extract()找出日期或间隔值的字段值
date_value:=extract(date_field from [datetime_value|interval_value])
SQL> select extract(month from sysdate) "This Month" from dual;
This Month
----------
6
SQL> select extract(year from add_months(sysdate,36)) " Years" from dual;
Years
----------
2008
10。localtimestamp()返回会话中的日期和时间
SQL> select localtimestamp from dual;
LOCALTIMESTAMP
---------------------------------------------------------------------------
21-6月 -05 10.18.15.855652上午
常用的转换函数
函数 | 功能 | 示例 | 结果 |
TO_CHAR | 转换成字符串类型 | to_char(1234.5,'$9999.9') | $1234.5 |
TO_DATE | 转换成日期类型 | to_date('1980-01-01','yyyy-mm-dd') | 01-1月-80 |
TO_NUMBER | 转换成数值类型 | to_number('1234.5') | 1234.5 |
常用的其他函数
函数 | 功能 |
NVL(EXP1,EXP2) | 如果exp1的值为null,则返回exp2的值,否则返回exp1的值 |
NVL2(EXP1,EXP2,EXP3) | 如果exp1的值为null,则返回exp2的值,则返回exp3的值 |
DECODE(VALUE,IF 1,THEN 1,IF2,THEN2,.....,ELSE) | 如果value的值为if1,则返回then1的值,如果value的值为if2,则返回then2的值,......,否则返回else值 |
常用的多行函数
函数 | 功能 | 示例 |
SUM() | 求和 | select sum(love) from pet; |
AVG() | 求平均值 | select avg(health) from pet where master_id = 1; |
COUNT() | 计数 | select count (type_id) from pet; |
MAX() | 求最大值 | select max(adopt_time) form pet; |
MIN() | 求最小值 | select min(adopt_time) form pet where typt_id = 1; |