oracle 日期函数网上已经有了不少,特我们跟集中一下,免得大家麻烦。
在oracle数据库的开发中,常因为时间的问题大费周章,所以特地将ORACLE数据的日期函数收藏致此。乃供他日所查也。
1、add_months(d,n) 日期d加n个月
SQL> SELECT SYSDATE AS This_Day,add_months(SYSDATE,1) AS Next_Day FROM dual;
THIS_DAY NEXT_DAY
-------------- ------------
08-9月 -10 08-10月-10
2、last_day(d) 包含d的月份的最后一天的日期
SQL> select last_day(sysdate) as last_day from dual;
LAST_DAY
-----------
30-9月 -10
3、new_time(d,a,b) 时区的日期和时间d在b时区的日期和时间
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as china,
to_char(new_time(sysdate,'est','GMT'),'YYYY-MM-DD HH24:MI:SS') as GMT
from dual;
CHINA GMT
------------------- -------------------
2010-09-08 09:51:50 2010-09-08 14:51:50
4、next_day(d,day) 比日期d晚,由day指定的周几的日期
SQL> select sysdate as this_day, next_day(sysdate,7) as next_sat from dual;
THIS_DAY NEXT_SAT
-------------- --------------
08-9月 -10 11-9月 -10
5、sysdate 当前的系统日期和时间
6、greatest(d1,d2,...dn) 给出的日期列表中最后的日期
SQL> select sysdate as this_day,greatest(sysdate,sysdate+1,sysdate+2) as max_day from dual;
THIS_DAY MAX_DAY
-------------- --------------
08-9月 -10 10-9月 -10
7、least(d1,k2,...dn) 给出的日期列表中最早的日期
SQL> select sysdate as this_day,least(sysdate,sysdate+1,sysdate-1) as min_day from dual;
THIS_DAY MIN_DAY
-------------- --------------
08-9月 -10 07-9月 -10
8、to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as today from dual;
TODAY
-------------------
2010-09-08 10:37:08
9、to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式
SQL> select to_date('2010-09-08 10:37:08','YYYY-MM-DD HH24:MI:SS') as today from dual;
TODAY
--------------
08-9月 -10
10、round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as this
,round(sysdate) as round_day
,to_char(sysdate+1/6,'YYYY-MM-DD HH24:MI:SS') as next_4hour
,round(sysdate+1/6) as round_day
from dual;
THIS ROUND_DAY NEXT_4HOUR ROUND_DAY
------------------- -------------- ------------------- --------------
2010-09-08 10:52:45 08-9月 -10 2010-09-08 14:52:45 09-9月 -10
11、trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as this
,trunc(sysdate) as trunc_day
,to_char(sysdate+1/6,'YYYY-MM-DD HH24:MI:SS') as next_4hour
,trunc(sysdate+1/6) as trunc_day
from dual;
THIS TRUNC_DAY NEXT_4HOUR TRUNC_DAY
------------------- -------------- ------------------- --------------
2010-09-08 10:56:18 08-9月 -10 2010-09-08 14:56:18 08-9月 -10
to_date 字符串类型转为换日期类型
字符串中的相应位置上的字符,必须符合时间范围的限制
查询Oracle日期格式
----------------------------------
select * from nls_database_parameters;
得到结果如下表: 表中NLS_DATE_FORMAT表示日期格式.
PARAMETER VALUE
----------------------------------- -----------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_NCHAR_CHARACTERSET ZHS16GBK
NLS_RDBMS_VERSION 8.1.7.0.0
或者查询V$NLS_PARAMETERS表,
select * from V$NLS_PARAMETERS;
也有类似结果
SQL>select to_date('2004-11-12 12-07-32','yyyy-mm-dd hh24-mi-ss') value from dual;
VALUE
-------------------
2004.11.12 12:07:32
SQL>select to_date('20041015') value from dual;
VALUE
-------------------
2004.10.15 00:00:00
SQL>select to_date('20041315') value from dual;
ERROR 位于第 1 行:
ORA-01861: 文字与格式字符串不匹配
sysdate 当前日期和时间
SQL>select sysdate value from dual;
VALUE
-------------------
2003.11.23 17:09:01
last_day 本月最后一天
SQL>select last_day(sysdate) value from dual;
VALUE
-------------------
2003.11.30 17:08:17
add_months(d,n) 日期d后推n个月
SQL>select add_months(sysdate,2) value from dual;
VALUE
-------------------
2005.01.23 17:10:21
next_day(d,day) 日期d之后的第一周中,指定的那天(指定星期的第几天)是什么日期
SQL>select next_day(sysdate,1) value from dual;
VALUE
-------------------
2004.11.28 17:38:55