Oracle中的日期时间函数

Oracle中日期时间的处理有时候是非常让人头疼的一件事下面呢,我将我总结的一些日期时间函数的用法写下来,以化输出为输入

先来了解些基本概念:

日期时间函数:用于处理DATE和TIMESTAMP类型的数据除了函数MONRHS_BETWEEN返回数字值外,其他日期函数均返回DATE类型的数据。

数字格式:Oracle是以7位数字格式来存放日期数据的,包括世纪、年、月、日、小时、分钟、秒,并且默认日期显示格式为“DD-MON-YY”。

下面主要对日期时间函数做以总结(说明:以下示例都在sqlplus中书写,并测试通过的):
1、ADD_MONTHS(d,n)  返回d之后或之前的n个月所对应的日期时间(n为正整数表示之后,n为负整数表示之前)。示例如下:
SQL>DECLARE
              v_date DATE;
          BEGIN
               v_date:=add_months(sysdate,-14);
               dbms_output.put_line('当前日期前14个月对应的日期:'||v_date);
          END;
当前日期前14个月对应的日期:27-10月-02

2、CURRENT_DATE   返回当前会话时区对应的日期时间,示例如下:
SQL>ALTER SESSION SET TIME_ZONE='-5:0';
SQL>ALTER SESSION SET nls_date_format='YYYY-MM-DD HH24:MI';
SQL>SELECT current_date FROM dual;
结果为:
CURRENT_DATE
--------------------------
2003-12-27 06:44

3、CURRENT_TIMESTAMP  用于返回当前会话时区的日期时间。示例如下:
SQL>SELECT current_timestamp FROM dual;
CURRENT_TIMESTAMP
---------------------------------
27-12月-03 07.45.22.146000 下午 +08:00

4、DBTIMEZONE   用于返回数据库所在时区,示例如下:
SQL>DECLARE
              v_zone VARCHAR2(10);
          BEGIN
               v_zone:=dbtimezone;
               dbms_output.put_line('当前数据库时区:'||v_zone);
          END;
结果:当前数据库时区:+08:00

5、EXTRACT  用于从日期时间值中取得所需要的特定数据(例如取得年份、月份等)
SQL>SELECT extract(YEAR FROM sysdate) year FROM dual;
YEAR
------------
2017


6、FROM_TZ  用于将特定时区的TIMESTAMP值转变为TIMESTAMP WITH TIME ZONE值,示例如下:
SQL>DECLARE
               v_tzv VARCHAR2(100);
         BEGIN
                v_tzv:=from_tz(TIMESTAMP '2003-03-28 08:00:00','3:00');
                dbms_output.put_line(v_tzv);
         END;
28-3月 -03 08.00.00.000000000 上午 +03:00

7、LAST_DAY(d)   用于返回特定日期所在月份的最后一天。示例如下:
SQL>SELECT last_day(sysdate) FROM dual;
LAST_DAY(sysdate)
----------------------------
31-12月-03

8、LOCALTIMESTAMP  用于返回当前会话时区的日期时间。
SQL>DECLARE 
             v_ts VARCHAR2(100);
          BEGIN
                 v_ts:=localtimestamp;
                 dbms_output.put_line('当前日期时间:'||v_ts);
          END;
当前日期时间:27-12月-03 08.25.08.607000000 下午

9、MONTHS_BETWEEN(d1,d2)   用于返回日期d1和d2之间相差的月数。如果d1小于d2,则返回负数。如果日期d1和d2的天数相同或都是月底,则返回整数;否则Oracle以每月31天为准来计算结果的小数部分。
SQL> SELECT months_between(sysdate,'31-8月 -1998')  FROM dual;
MONTHS_BETWEEN(SYSDATE,'31-8 月-1998')
-------------------------------------------------------------------
63.898429

10、NEW_TIME(date,zone1,zone2)   用于返回时区一的日期时间所对应的时区二的日期时间。
SQL>DECLARE
                     v_time DATE;
          BEGIN
                     dbms_session.set_nls('nls_date_format','YYYY-MM-DD HH24:MI:SS');
                     v_time:=new_time(to_date('2003-11-10 12:10:00','YYYY-MM-DD HH24:MI:SS'),'BST','EST');
                     dbms_output.put_line('当前日期时间:'||v_time);
          END;
当前日期时间:2003-11-10 18:10:00

11、NEXT_DAY(d,char)    该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。示例如下:
SQL>SELECT next_day(sysdate,'星期一') AS nextday FROM dual;
nextday
-----------
29-12月 -03

12、ROUND(d[.fmt])  用于返回日期时间的四舍五入结果。如果fmt指定年度,则7月1日为分界线;如果fmt指定月,则16日为分界线;如果指定天,则中午12:00时为分界线
SQL>DECLARE
                v_date DATE;
         BEGIN
                v_date:=ROUND(SYSDATE,'MONTH');
               dbms_output.put_line(SYSDATE||'四舍五入结果:'||v_date);
         END;
28-12月-03 四舍五入结果:01-1月 -04

13、SESSIONTIMEZONE 返回当前会话所在时区
SQL>SELECT sessiontimezone FROM dual;
SESSIONTIMEZONE
---------------------------------
+08:00

14、SYSDATE  用于返回当前系统的日期时间
SQL>SELECT sysdate FROM dual;
SYSDATE 
----------------
28-12月 -03

15、SYSTIMESTAMP  用于返回当前系统的日期时间及时区。示例如下
SQL>DECLARE
                   v_timestamp VARCHAR2(100);
          BEGIN
                   v_timestamp:=SYSTIMESTAMP;
                   dbms_output.put_line('当前系统时间及时区:'||v_timestamp);
          END;
当前系统时间及时区:28-12月-03 07.46.47.745000000 上午 +08:00

注意:以上为一些常用的日期时间函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值