三、日期时间函数
日期时间函数接受日期时间类型参数,这些参数由表中列或表达式构成。
日期时间数据在Oracle数据库中,是以世纪、年、月、日、时、分、称的形式存储的。
日期显示格式默认为“DD-MON-YY”的形式。
1.ADD_MONTHS(x,n)
--返回日期x加上n个月所对应的日期。n为正数,则返回值表示x之后的日期;n为负数,则返回值表示x之前的日期。
SELECT ADD_MONTHS('08-8月-2008', 12) FROM dual; --2009-08-08
2.CURRENT_DATE
--返回当前会话时区所对应的日期时间。
SELECT CURRENT_DATE FROM dual; --2012-03-07 14:56:06
3.CURRENT_TIMESTAMP[(X)]
--返回当前会话区所对应的日期时间,可选参数x表示精度,取值范围0-9之间的整数;
--如果不指定参数x,则默认精度值为6.
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(3) FROM dual;
--07-3月 -12 02.56.15.796309 下午 +08:00,07-3月 -12 02.56.15.796 下午 +08:00
4.DBTIMEZONE
--返回数据库所在的时区
SELECT DBTIMEZONE FROM dual; --+08:00
5.EXTRACT(YEAR|MONTH|DAY FROM x)
--从日期x中选取所需要的年或月或日数据。
SELECT EXTRACT(YEAR FROM TO_DATE('08-8-2008','dd-mm-yy')) FROM dual; --2008
6.LAST_DAY(x)
--返回日期x所在月份的最后一天的日期
SELECT LAST_DAY('08-8月-2008') FROM dual; --2008-08-31
7.LOCALTIMESTAMP[(x)]
--返回当前会话时区所对应的日期时间,可选参数x表示精度,取值0-9之间的整数,默认为6。
SELECT LOCALTIMESTAMP, LOCALTIMESTAMP(3) FROM dual;
--07-3月 -12 03.00.01.212803 下午,07-3月 -12 03.00.01.213 下午
8.MONTHS_BETWEEN(x,y)
--返回日期x和日期y两个日期之间相差的月数。
SELECT MONTHS_BETWEEN('31-8月-2008','31-1月-2008'), --7
MONTHS_BETWEEN('31-1月-2008','31-8月-2008') FROM dual; --(-7)
9.NEXT_DAY(x,week)
--返回日期x后的第一个由week指定的星期几所对应的日期
SELECT NEXT_DAY('08-8月-2008','星期三') FROM dual; --2008-08-13
10.ROUND(x,[fmt])
--返回日期x的四舍五入结果。fmt可以取'YEAR'、'MONTH'、'DAY'三者之一。
--YEAR以7月1日为舍入分界;MONTH以16日为舍入分界;DAY以12:00为舍入分界。
SELECT ROUND(TO_DATE('01-7-2008','dd-mm-yy'),'YEAR'), --2009-01-01
ROUND(TO_DATE('30-6-2008','dd-mm-yy'),'YEAR') FROM dual; --2008-01-01
11.SYSDATE
--返回当前系统的日期时间。
SELECT SYSDATE FROM dual; --2012-03-07 15:02:29
12.SYSTIMESTAMP
--返回当前系统的日期时间(格式与SYSDATE不同)
SELECT SYSTIMESTAMP FROM dual; --07-3月 -12 03.02.42.926780 下午 +08:00
13.TRUNC(x,[fmt])
--返回截断日期x时间数据。fmt可以取'YEAR'、'MONTH'、'DAY'三者之一。
--YEAR返回本年的1月1日;MONTH返回1月;DAY返回1日。
SELECT TRUNC(TO_DATE('08-8-2008','dd-mm-yy'), 'YEAR') FROM dual; --2008-01-01