《Oracle Database编程指南》13-03:日期时间函数(Datetime Functions)

Haidee ·
更新时间:2024-11-10
· 818 次阅读

日期时间函数(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; -------------------------------------------------------------------------------
作者:AT阿宝哥



日期时间 DateTime DATABASE 函数 Oracle

需要 登录 后方可回复, 如果你还没有账号请 注册新账号