5.3 日期函数

在默认情况下,日期数据的格式是DD-MON-YY。其中,DD表示两位数字的日,MON表示3位数的月,YY表示两位数字的年。在插入数据时,默认也采用DD-MON-YY格式插入数据。

5.3.1 日期函数概述

日期数据的格式由NLS_DATE_FORMAT系统参数来设置,该系统参数存储在INIT.ORA和SPFILE.ORA文件中。可以使用SHOW PARAMETERS命令查看这些系统参数的值,另外还可以通过ALTER SYSTEM或ALTER SESSION命令修改该系统参数。ALTER SYSTEM命令表示修改系统参数的文件,这种修改设置在以后的数据库操作中将一直起作用;在ALTER SESSION命令的设置只在当前的会话中起作用,该会话结束后,其设置就会失效。

在Oracle中,系统提供了许多用于处理日期和时间的函数,下表描述了常用的日期、时间函数的类型和功能。

5.3.2 计算日期

在Oracle系统中,DATE类似于NUMBER,也属于一种数据类型,同样拥有可以计算的功能。

1. 计算当前日期

Oracle中的SYSDATE()函数可以返回当前系统中的日期,例如下列代码。

在使用SYSDATE函数返回当前日期时,需要注意该函数是根据行数来显示当前日期值的,也就是说表中存在几行数据便返回几个日期值。

除了SYSDATE()函数之外,用户还可以使用CURRENT_DATE()函数来显示时区中的系统日期,以及使用SYSTIMESTAMP()函数来显示数据类型格式的系统日期,其具体代码如下。

2. 计算两个日期之间的月数

在Oracle系统中,MONTHS_BETWEEN()函数可以返回两个日期之间的月数,其结果值既可以是正数,也可以是负数。如果第一个参数指定的日期晚于第二个参数指定的日期,则结果值为负数,如下所示。

3. 计算指定月份的日期

用户可以使用ADD_MONTHS()函数,在指定的日期中增减月份,以获得间隔指定月后的日期。例如,下面的代码中为指定的日期添加了6个月,其结果显示6个月后的日期。

而下列代码则将指定的日期减少了6个月,其结果显示了6个月前的日期。

4. 显示指定星期的日期

使用NEXT_DAY()函数,可以返回当前日期之后指定星期的具体日期,也就是说指定当前日期后的星期一至星期日的具体日期。

例如,已知具体日期,来指定具体日期后的第1个星期一的日期。首先,需要获取已知日期,以便于对比计算结果。

      SQL> select dte from tb;

      DTE
      --------------
      15-9月 -17
      15-10月-17
      15-11月-17
      15-12月-17

然后,使用NEXT_DAY()函数计算已知日期后的星期一的具体日期。

      SQL> select next_day(dte,2) "Monday"
         2  from tb;

      Monday
      --------------
      18-9月 -17
      16-10月-17
      20-11月-17
      18-12月-17

5. 显示每个月的最后一天

使用LAST_DAY()函数,可以返回每个月最后一天的日期。下面代码中显示了指定日期所在月的最后一天。

      SQL> select last_day(dte) "End Month"
         2  from tb;

      End Month
      --------------
      30-9月 -17
      31-10月-17
      30-11月-17
      31-12月-17