首页 > 学院 > 开发设计 > 正文

Oracle中的日期时间函数

2019-11-08 20:36:47
字体:
来源:转载
供稿:网友

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月-022、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:443、CURRENT_TIMESTAMP  用于返回当前会话时区的日期时间。示例如下:
SQL>SELECT current_timestamp FROM dual;CURRENT_TIMESTAMP---------------------------------27-12月-03 07.45.22.146000 下午 +08:004、DBTIMEZONE   用于返回数据库所在时区,示例如下:
SQL>DECLARE              v_zone VARCHAR2(10);          BEGIN               v_zone:=dbtimezone;               dbms_output.put_line('当前数据库时区:'||v_zone);          END;结果:当前数据库时区:+08:005、EXTRACT  用于从日期时间值中取得所需要的特定数据(例如取得年份、月份等)
SQL>SELECT extract(YEAR FROM sysdate) year FROM dual;YEAR------------20176、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:007、LAST_DAY(d)   用于返回特定日期所在月份的最后一天。示例如下:
SQL>SELECT last_day(sysdate) FROM dual;LAST_DAY(sysdate)----------------------------31-12月-038、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.89842910、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:0011、NEXT_DAY(d,char)    该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。示例如下:
SQL>SELECT next_day(sysdate,'星期一') AS nextday FROM dual;nextday-----------29-12月 -0312、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月 -0413、SESSIONTIMEZONE 返回当前会话所在时区
SQL>SELECT sessiontimezone FROM dual;SESSIONTIMEZONE---------------------------------+08:0014、SYSDATE  用于返回当前系统的日期时间
SQL>SELECT sysdate FROM dual;SYSDATE ----------------28-12月 -0315、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注意:以上为一些常用的日期时间函数。:
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表