CURRENT_DATE()
语法 说明 CURRENT_DATE 返回当前会话所处时区的日期。CURRENT_DATE和SYSDATE看上去类似,但由于当前会话所处时区可以被修改,因此CURRENT_DATE实质上反映的是当前客户端的日期。 示例 SQL> select sessiontimezone, current_date from dual; SESSIONTIMEZONE CURRENT_DATE --------------- -------------- +08:00 22-6月 -08 CURRENT_TIMESTAMP()
语法 说明 CURRENT_TIMESTAMP(x) 返回当前会话时区的时间戳。x表示时间戳中精确到秒之后的第几位,默认精度为6,即百万分之一秒。 示例 SQL> select sessiontimezone, current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP --------------- ---------------------------------------- +08:00 22-6月 -08 12.47.29.234000 下午 +08:00 SQL> select sessiontimezone, current_timestamp(3) from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP(3) --------------- ---------------------------------------- +08:00 22-6月 -08 12.49.15.625 下午 +08:00 DBTIMEZONE()
语法 说明 示例 DBTIMEZONE 返回数据库所处的时区。 EXTRACT()
语法 说明 EXTRACT(x FROM a) 从给定日期中抽取需要的日期字段。x表示组成时间戳的各个字段,有效的x值为:SECOND、MINUTE、HOUR、DAY、MONTH、YEAR、TIMEZONE_MINUTE、TIMEZONE_HOUR、TIMEZONE_REGION、TIMEZONE_ABBR。 a代表被抽取的日期,它可以是一个类似sysdate的直接量,也可以是通过其他函数转换或生成的日期。 示例 SQL> select extract (year from sysdate) from dual; EXTRACT(YEARFROMSYSDATE) ------------------------ 2008 需要注意的是,如果抽取的是时、分、秒等时间量,则需要在FROM 后面加带TIMESTAMP,并且后面加上表示时间字符串: SQL> select extract (hour from TIMESTAMP '2011-08-15 07:00:00') hour from dual; HOUR ---------- 7 LAST_DAY()
语法 说明 示例 LAST_DAY(d) 返回包含日期d的月份的最后一天的日期。这个函数可以用来确定当前月中还剩下多少天。 LOCALTIMESTAMP()
语法 说明 示例 LOCALTIMESTAMP 返回当前会话时区中的时间戳。 MONTHS_BETWEEN
语法 说明 MONTHS_BETWEEN(date1, date2) 返回在date1和date2之间月的数目。计算方法是前者减去后者,如果date1小于date2,则返回一个负数。如果date1和date2的“日”部分不完全相同,则返回一个分数(以31天作为一个月进行计算)。 示例 SQL> select months_between('23-6月-06', '31-10月-06') months from dual; MONTHS ---------- -4.2580645 NEW_TIME()
语法 说明 NEW_TIME(d, zone1, zone2) 将时区zone1中的日期d转换成时区2中的日期后返回。这个函数通常用来进行日期时间的转换,所以d最好带上时间。典型的例子是给定当前时区的日期时间,返回此时另一个时区的日期时间。但时区zone1、zone2不是我们所理解的“+8:00”,而是GMT(格林尼志标准时间)、EST(东部标准时)、AST(大西洋标准时)、PDT(太平洋夏令时)等字符串格式的时区标识。这些时区应该代表各地的时区划分方式,不具有通用性。 示例 SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') bj_time, TO_CHAR(NEW_TIME(SYSDATE, 'PDT', 'GMT'), 'yyyy-mm-dd hh24:mi:ss') los_angles FROM DUAL; BJ_TIME LOS_ANGLES 2010-06-03 21:16:41 ------------------ ----------------------------------- 2010-06-03 14:16:41 NEXT_DAY()
语法 说明 NEXT_DAY(d, string) 返回日期d之后满足string条件的第一天。string中的条件指的是一周中的某一天,也就是星期几。举例来说,下面的查询返回下一个星期六的日期。 示例 SQL> select next_day(sysdate, '星期六') next_day from dual; NEXT_DAY -------------- 28-6月 -08 NUMTODSINTERVAL()
语法 说明 NUMTODSINTERVAL(x, string) 该函数将数字x和时间单位string合并成一个时间戳类型的数据后返回。string表示具有时间意义的字符串,可取的值有SECOND、MINUTE、HOUR、DAY。x的取值可正可负。该函数通常用于对一个现有日期或时间戳进行增减。 示例 SQL> select current_timestamp from dual; CURRENT_TIMESTAMP ---------------------------------------- 22-6月 -08 04.45.42.406000 下午 +08:00 SQL> select current_timestamp + numtodsinterval(-2, 'day') numtodsinterval from dual; NUMTODSINTERVAL --------------------------------------------------------------------------- 20-6月 -08 04.45.59.890000000 下午 +08:00 NUMTOYMINTERVAL()
语法 说明 NUMTOYMINTERVAL(x, string) 该函数将数字x和日期单位string合并成一个时间戳类型的数据后返回。string表示具有日期意义的字符串,可取的值有YEAR、MONTH。x的取值可正可负。该函数通常用于对一个现有日期进行增减。比如,下例在当年基础上增加了两年时间。 示例 SQL> select current_timestamp + numtoyminterval(2, 'year') numtoyminterval from dual; NUMTOYMINTERVAL --------------------------------------------------------------------------- 22-6月 -10 05.02.05.718000000 下午 +08:00 ROUND()
语法 说明 ROUND(d [, format]) 将日期d按照由format指定的格式进行舍入。format的格式列表参见下面。如果format被省略,则它缺省为“DD”。以下示例将当前日期舍入到下一个季度。 示例 SQL> select round(sysdate, 'Q') round from dual; ROUND -------------- 01-7月 -08 SYSDATE()
语法 说明 SYSDATE 返回数据库服务器当前的日期和时间。在默认情况下,SYSDATE函数不返回时间,需要通过转换函数生成。 示例 SQL> select to_char(sysdate, 'month DD, YYYY HH24: MI: SS') now from dual; NOW -------------------------- 6月 22, 2008 19: 26: 14 SYSTIMESTAMP()
语法 说明 示例 SYSTIMESTAMP() 返回带有时区的数据库服务器当前时间戳。 TRUNC()
语法 说明 TRUNC(d [, format]) 根据format指定的格式截取日期d。TRUNC()中使用的format格式字符串与ROUND()是完全相同的,详见下表。如果format被省略,则它缺省为“DD”。以下示例将当前日期截取至最近的季度。 示例 SQL> select trunc(sysdate, 'Q') trunc from dual; TRUNC -------------- 01-4月 -08 SESSIONTIMEZONE()
语法 说明 SESSIONTIMEZONE 返回当前会话所处的时区。由于会话所处的时区可以通过alter session语句进行修改,因此该函数可以用于测试不同时区的会话。 示例 SQL> select sessiontimezone, current_date from dual; SESSIONTIMEZONE CURRENT_DATE --------------- -------------- +08:00 22-6月 -08 SQL> alter session set time_zone='-05:00'; 会话已更改。 SQL> select sessiontimezone, current_date from dual; SESSIONTIMEZONE CURRENT_DATE --------------- -------------- -05:00 21-6月 -08 ROUND()和TRUNC()函数的format格式
格式字符串 CC、SCC 世纪 涵义说明 SYYYY、YYYY、YEAR、SYEAR、YYY、YY、Y 年(以7月1日为界对年进行舍入) IYYY、IY、I Q MONTH、MON、MM、RM ISO年 季度(以该季度的第2个月中第16天为界对季度进行舍入) 月(以第16天为界进行舍入)