Oracle日期之一

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值