日期时间函数(Datetime Functions)操作日期(date)、时间戳(timestamp,带有时区的时间戳,以及带有本地时区的时间戳)和interval(从天到秒的时间间隔,从年到月的时间间隔)值。
有些日期时间函数是为Oracle DATE
数据类型设计的,比如ADD_MONTHS、CURRENT_DATE、LAST_DAY、NEW_TIME和NEXT_DAY。如果您提供一个时间戳值作为参数,那么Oracle数据库将在内部将输入类型转换为日期值并返回一个日期值。例外情况是MONTHS_BETWEEN函数(它返回一个数字)和ROUND和TRUNC函数(它们根本不接受时间戳或间隔值)。
Oracle 内部使用数字存储日期: 世纪,年,月,日,小时,分钟,秒。
默认的日期格式是 DD-MON-RR。
可以只指定年的后两位在20世纪存放21世纪的日期。
同样可以在21世纪存放20世纪的日期。
日期的数学运算:
在日期上加上或减去一个数字结果仍为日期。
两个日期相减返回日期之间相差的天数。
可以用数字除24来向日期中加上或减去小时。
日期函数如下:
ADD_MONTHS CURRENT_DATE CURRENT_TIMESTAMP DBTIMEZONE EXTRACT (datetime) FROM_TZ LAST_DAY LOCALTIMESTAMP MONTHS_BETWEEN NEW_TIME NEXT_DAY NUMTODSINTERVAL NUMTOYMINTERVAL ORA_DST_AFFECTED ORA_DST_CONVERT ORA_DST_ERROR ROUND (date) SESSIONTIMEZONE SYS_EXTRACT_UTC SYSDATE SYSTIMESTAMP TO_CHAR (datetime) TO_DSINTERVAL TO_TIMESTAMP TO_TIMESTAMP_TZ TO_YMINTERVAL TRUNC (date) TZ_OFFSET/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:
注意:
*/
-------------------------------------------------------------------------------
--查询系统当前日期
SELECT SYSDATE FROM Dual;
-------------------------------------------------------------------------------
--日期的数学运算:减法,日期-日期=天数。注意,日期之间不允许相加、相乘和相除。
SELECT Hiredate , (SYSDATE - Hiredate) FROM EMP;
SELECT hiredate , (SYSDATE - hiredate) / 7 AS weeks FROM emp;
SELECT Hiredate , (SYSDATE - Hiredate) / 365 AS Years FROM EMP;
--日期的数学运算:加法,日期+数字=日期。注意,参与运算的数字代表天数,可以用小数。
SELECT SYSDATE + 7 FROM dual;
SELECT SYSDATE - 7 FROM dual;
SELECT SYSDATE + 36/24 FROM Dual;
SELECT SYSDATE + 1.5 FROM Dual;
-------------------------------------------------------------------------------
--MONTHS_BETWEEN,返回两个日期参数之间月数的数值。
SELECT months_between
(TO_DATE('02-02-1995','MM-DD-YYYY'),
TO_DATE('01-01-1995','MM-DD-YYYY') ) FROM dual;
SELECT MONTHS_BETWEEN
(SYSDATE ,
SYSDATE +31) from dual;
SELECT months_between(SYSDATE , '31-12月-2016') FROM dual; --距离年底的月数
-------------------------------------------------------------------------------
--ADD_MONTHS,月数相加返回日期项
select ADD_MONTHS(sysdate , 2) from dual;
-------------------------------------------------------------------------------
--NEXT_DAY,返回指定日期的下一个星期几的日期项
SELECT NEXT_DAY('21-11月-2016', 7) FROM dual;
SELECT NEXT_DAY('21-11月-2016', 'sun') FROM dual;
SELECT NEXT_DAY('21-11月-2016', 'tue') FROM dual;
SELECT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 15 FROM dual;
SELECT NEXT_DAY('15-OCT-2009','TUESDAY') "NEXT DAY" FROM dual;
-------------------------------------------------------------------------------
--LAST_DAY,返回指定日期所属月的最后一天的日期项。
SELECT LAST_DAY(SYSDATE) FROM dual;
SELECT LAST_DAY(SYSDATE) - SYSDATE FROM dual;
SELECT LAST_DAY(SYSDATE) - SYSDATE "Days Left" FROM dual;
-------------------------------------------------------------------------------
--ROUND,按照日期的精度格式对其进行舍入运算
SELECT round(SYSDATE) FROM dual;
SELECT round(SYSDATE , 'CC') FROM dual;--世纪
SELECT round(SYSDATE , 'YYYY') FROM dual;--年
SELECT round(SYSDATE , 'Q') FROM dual;--季度
SELECT round(SYSDATE , 'MM') FROM dual;--月
SELECT round(SYSDATE , 'w') FROM dual;--星期 ???
SELECT round(SYSDATE , 'DD') FROM dual;--天
SELECT round(SYSDATE , 'HH') FROM dual;--小时
SELECT round(SYSDATE , 'MI') FROM dual;--分
-------------------------------------------------------------------------------
--TRUNC,根据指定日期格式对其进行截取
SELECT TRUNC(SYSDATE) FROM dual;--默认格式为日
SELECT TRUNC(SYSDATE+27) FROM dual;--默认格式为日
SELECT TRUNC(SYSDATE+10) FROM dual;--默认格式为日
SELECT TRUNC(SYSDATE+27 , 'w') FROM dual;
SELECT TRUNC(SYSDATE+27 , 'CC') FROM dual;
SELECT TRUNC(SYSDATE+27 , 'YYYY') FROM dual;
-------------------------------------------------------------------------------
--隐式数据类型转换:varchar2和char统称为字符类型,几乎可以存储所有类型的信息
--数字到字符串
SELECT LENGTH(1234567890) FROM dual;
--日期到字符串
SELECT SYSDATE FROM dual;
SELECT LENGTH(SYSDATE) FROM dual;
-------------------------------------------------------------------------------
--隐式数据类型转换:字符串到数字,表示数字的字符串必须是有效的数字
--字符串到数字
SELECT mod('11',2) FROM dual;
SELECT mod('11.123',2) FROM dual;
--字符串到日期
SELECT next_day('20-9月-2016', 7) FROM dual;
SELECT mod('11.123.123',2) FROM dual; --转换失败
SELECT mod('$11',2) FROM dual; --转换失败
-------------------------------------------------------------------------------
--隐式数据类型转换:字符串到日期,表示日期的字符串必须是如下格式:[D|DD]分隔符[MON|MONTH]分隔符[R|RR|YY|YYYY],其中,R和RR分别表示1位或者2位数字的年。
--另外,分隔符可以是大多数标点符号、空格和制表符。
SELECT add_months('10-9月-16' , 1) FROM dual;--DD-MM月-YY
SELECT add_months('1\9月/16' , 1) FROM dual;
SELECT add_months('1/9月/16' , 1) FROM dual;
SELECT add_months('1*9月*16' , 1) FROM dual;
SELECT add_months('1 9月 16' , 1) FROM dual;--空格
SELECT add_months('1$9月$16' , 1) FROM dual;--美元符号
-------------------------------------------------------------------------------
--显式数据类型转换:TO_CHAR将数字转换为字符
SELECT TO_CHAR(00001) FROM dual;--只使用第一个强制参数num
SELECT TO_CHAR(00001,'0999999') FROM dual;--使用第二个参数format,并使用零
SELECT TO_CHAR(00001,'0999999.00') FROM dual;--使用小数点的位置
SELECT TO_CHAR(00001,'0999999D00') FROM dual;--小数分隔符的位置(默认是半角句点)
SELECT TO_CHAR(00001,'0999999,00') FROM dual;--逗号的位置
SELECT TO_CHAR(00001,'0999999G00') FROM dual;--组分隔符的位置
SELECT TO_CHAR(00001,'$0999999') FROM dual;--美元符号
SELECT TO_CHAR(00001,'L0999999') FROM dual;--当地货币符号
SELECT TO_CHAR(-3040,'999999MI') FROM dual;--负数的减号位置
SELECT TO_CHAR(-3040,'999999PR') FROM dual;--包围在括号内的负数
SELECT to_char(3.1415,'99.999EEEE') FROM dual;--科学计数法
SELECT to_char(100,'99999V99') FROM dual;--乘以10n次,V后面9的数量表示10的次方
SELECT TO_CHAR(3040,'S999999') FROM dual;--前面加上+或者-
-------------------------------------------------------------------------------
--显式数据类型转换:TO_CHAR将日期转换为字符
SELECT SYSDATE || ' is a good day! ' FROM dual;
SELECT TO_CHAR(SYSDATE) || ' is a good day! ' FROM dual;
SELECT TO_CHAR(SYSDATE , 'yyyy-mm-dd') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Y') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YYY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YYYY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'RR') FROM dual;--两位数字表示的年(已知世纪)
SELECT TO_CHAR(SYSDATE ,'CC') FROM dual;--世纪
SELECT TO_CHAR(SYSDATE ,'Year') FROM dual;
SELECT TO_CHAR(SYSDATE ,'year') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YEAR') FROM dual;
SELECT TO_CHAR(SYSDATE ,'MM') FROM dual;
SELECT TO_CHAR(SYSDATE ,'MON') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Mon') FROM dual;
SELECT TO_CHAR(SYSDATE ,'mon') FROM dual;
SELECT TO_CHAR(SYSDATE ,'MONTH') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Month') FROM dual;
SELECT to_char(SYSDATE ,'month') FROM dual;
SELECT TO_CHAR(SYSDATE ,'D') FROM dual;--本周的第几天
SELECT TO_CHAR(SYSDATE ,'DD') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DDD') FROM dual;--年的日
SELECT to_char(SYSDATE ,'dy') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DY') FROM dual;--星期几
SELECT TO_CHAR(SYSDATE ,'Dy') FROM dual;
SELECT TO_CHAR(SYSDATE ,'day') FROM dual;--区分大小写并用英语表示的星期,但是中文系统中不支持
SELECT TO_CHAR(SYSDATE ,'Day') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DAY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'W') FROM dual;--月的周数
SELECT TO_CHAR(SYSDATE ,'WW') FROM dual;--年的周数
SELECT TO_CHAR(SYSDATE ,'Q') FROM dual;--年的季度数
SELECT TO_CHAR(SYSDATE ,'AM') FROM dual;--子午线指示器
SELECT TO_CHAR(SYSDATE ,'PM') FROM dual;
SELECT TO_CHAR(SYSDATE ,'HH') FROM dual;--小时
SELECT TO_CHAR(SYSDATE ,'MI') FROM dual;--分钟
SELECT TO_CHAR(SYSDATE ,'SS') FROM dual;--秒数
SELECT TO_CHAR(SYSDATE ,'SSSSS') FROM dual;--午夜之后的秒数
-------------------------------------------------------------------------------
--显式数据类型转换:TO_DATE将字符串转换成日期
SELECT TO_DATE('2009', 'YYYY') FROM dual;
SELECT TO_DATE('8月-2016', 'MON-YYYY') FROM dual;
SELECT TO_DATE('01-8月-2016', 'DD-MON-YYYY') FROM dual;
SELECT TO_DATE('01-8月-2016 18:03:45', 'DD-MON-YYYY HH24:MI:SS') FROM dual;
-------------------------------------------------------------------------------
--显式数据类型转换:TO_NUMBER将字符串转换成数字
SELECT TO_NUMBER(NULL) FROM dual;
SELECT TO_NUMBER('100.00', '9G999D99') FROM dual;
SELECT TO_NUMBER('$1,000.55', '$999,999.99') FROM dual;
SELECT TO_NUMBER('¥1,000.55', 'L999,999.99') FROM dual;
-------------------------------------------------------------------------------