• 1. 第8章 Oracle中的日期型及处理方法Oracle中提供了日期型来处理日期相关的应用。其中,最常用的类型为date和timestamp。本章将讲述日期类型的基本信息及处理方法,主要内容包括: 日期型简介 日期型函数 通过本章的学习,读者可以了解Oracle中日期型的基本应用。
  • 2. 8.1 Oracle中的日期型Oracle中的date类型实际包含了以下信息: Century:世纪信息; Year:年份信息; Month:月份信息; Day:天数信息; Hour:小时信息; Minute:分钟信息; Second:秒数信息。 除此之外,Oracle还提供了timestamp(时间戳)类型。该类型用于表征更加精确的时间,精确度可以达到毫秒级。
  • 3. 8.2 Oracle中的日期处理Oracle提供了丰富的函数来处理日期,本节将详细讲述这些函数的用法。
  • 4. 8.2.1 获得当期日期——sysdate函数该函数用法返回当前日期,如下所示。 SQL> select sysdate from dual; SYSDATE ------------------------------ 2010-4-4 12:06:25 在执行结果中可以看到,当期日期信息中包含了年、月、日、时、分、秒等信息。
  • 5. 8.2.2 为日期加上特定月份——add_months()函数对于一个日期型来说,一个常见应用为添加固定月数。例如,劳动法规定,员工自递交辞职报告一个月之后将自动离职,那么,可以利用add_months()函数自动计算员工的离职日期。 SQL> select add_months(sysdate, 1) new_date from dual; NEW_DATE ------------------------------ 2010-5-4 12:22:34
  • 6. 8.2.3 返回特定日期所在月的最后一天——last_day()函数last_day()函数可以用于返回某个日期所在月份的最后一天,返回值同样为一个日期型。 SQL> select last_day(to_date('2010-2-28', 'YYYY-MM-DD')) new_date from dual; NEW_DATE ------------------------------ 2010-2-28 SQL> select last_day(to_date('2000-2-28', 'YYYY-MM-DD')) new_date from dual; NEW_DATE ------------------------------ 2000-2-29
  • 7. 8.2.4 返回两个日期所差的月数——months_between ()函数months_between()函数用于返回两个日期相减获得的月数。该函数的返回值并不一定为整数,如下所示。 SQL> select months_between(to_date('2010-4-4', 'YYYY-MM-DD'), to_date('2010-2-6', 'YYYY-MM-DD')) 2 as new_date from dual; NEW_DATE ------------------------------ 1.93548387096774
  • 8. 8.2.5 返回特定日期之后的一周之内的日期——next_day()函数next_day()函数用于获得特定日期之后的一个星期之内的日期。例如,2010-4-4是星期日,那么,为了获得紧随其后的第一个星期一,可以利用如下语句。 SQL> select next_day(to_date('2010-4-4', 'yyyy-mm-dd'), 2) new_date from dual; NEW_DATE ----------- 2010-4-5
  • 9. 8.2.6 截取日期——trunc()函数trunc()函数不仅可以截取数字,而且可以截取日期,其工作原理与截取数字非常相似。其使用语法如下所示。 trunc(日期, 截取格式) 为了使用该函数,不仅需要指定日期原始值,而且要指定截取格式——即截取到日期的哪个部分。 SQL> select trunc(sysdate, 'DD') new_date from dual; NEW_DATE ------------------------------ 2010-4-5
  • 10. 8.2.7 返回当前会话时区的当前日期——current_date()函数current_date()函数用于返回当前时区下的当前日期,我们可以结合当前时区来查看current_date()函数的使用。 SQL> select sessiontimezone, to_char(current_date, 'yyyy-mm-dd hh:mi:ss') result from dual; SESSIONTIMEZONE RESULT ----------------------------- ------------------- +08:00 2010-04-05 04:46:26
  • 11. 8.2.8 返回当前会话时区的时间戳——current_timestamp函数current_ timestamp函数用于返回当前时区下的当前时间戳,我们可以结合当前时区来查看current_ timestamp函数的使用。 SQL> select sessiontimezone, current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP ----------------------------- ---------------------------------------- +08:00 05-4月 -10 04.51.11.640000 下午 +08:00 sessiontimezone用于返回当前时区,+08:00表明当前时区为东八区;current_timestamp返回当前日期。
  • 12. 8.2.9 返回日期的某个域——extract()函数日期中的年、月、日、时、分、秒等可以看做日期的域。extract()函数可以从一个日期中分解出各个域。其使用语法如下所示。 extract(域名,from 日期) 为了从当前日期中分解出月份,可以利用如下所示的SQL语句。 SQL> select extract(month from sysdate) new_month from dual; NEW_MONTH ----------------- 4
  • 13. 8.2.10 将日期转换为字符串——to_char()函数to_char()函数不仅可以用于数值的格式化,同样可以对日期进行格式化。to_char()函数格式化日期的使用方法如下所示。 to_char(日期, 格式) 例如,为了以YYYY-MM-DD的格式来显示当前日期,那么可以利用如下SQL语句。 SQL> select to_char(sysdate, 'YYYY-MM-DD') new_date from dual; NEW_DATE ------------------------------ 2010-04-05
  • 14. 8.3 本章实例对于日期型来说,无法利用extract()函数正常获得时、分、秒等信息。为了解决该问题,我们可以自行创建一个函数,利用该函数来获得一个日期的所有信息。
  • 15. 8.4 本章小结本章讲述了Oracle中的日期型的基本概念,并详细讲述了如何利用Oracle的内置函数对日期型进行处理。其中,trunc()函数与to_char()函数是常用的操作,读者应该着重把握其使用方法。在理解针对日期型的函数时,尤其要结合返回值来理解其用法。例如,trunc()函数的返回值是一个日期型,因此,无论进行怎样的截取动作,返回值中总是含有年、月、日、时、分、秒的信息,该函数的本质在于将日期的某些部分置为0而已。