Oracle拥有强大的能力存储和日期计算,如计算日期之间的秒、分钟、小时、天、月、年。本章主要讲解如何利用日期型函数来操作与日期和时间有关的数据。一般情况下,最常用的日期类型为date和timestamp。date是Oracle中的一种数据类型,它拥有自己的独特功能,可以用来放置日期和时间。Oracle中的date类型实际包含了以下信息:Century:世纪信息;Year:年份信息;Month:月份信息;Day:天数信息;Hour:小时信息;Minute:分钟信息;Second:秒数信息。除此之外,Oracle还提供了timestamp(时间戳)类型。该类型用于表示更加精确的时间,精确度可以达到毫秒级。日期数据类型由两个主要部分组成,日期和时间。Oracle数据库中默认的日期格式dd-mon-yy,dd表示日,mon表示月,yy表示年。在将日期插入到表中时,可以不指定时间部分的值,默认是午夜,用“00:00:00”表示。Oracle提供了丰富的函数来处理日期,本节将详细讲述这些函数的用法。在select查询中,有时需要获取系统的时间。sysdate函数可以获取数据库系统的当前日期,通常在插入数据时使用,此函数不带任何参数,函数用法如下所示。【示例7-1】查询系统的当前日期。对于一个日期型来说,一个常见应用为添加固定月数。add_months函数可以实现日期和月份的计算。它可以在给定的日期上添加相当于月份的整数,然后重新计算日期。【示例7-2】将job_history表中,员工辞职日期推后一个月,那么,可以利用add_months()函数自动计算员工的离职日期。last_day()函数可以用于返回某个日期所在月份的最后一天,包含一个参数,返回值同样为一个日期型。由于每个月长度不同,所以每个月的最后一天的天数不固定。【示例7-3】Oracle提供了last_day()函数来返回一个月的最后天数。months_between()函数用于返回两个日期相减获得的月数。该函数有两个参数,该函数的返回值并不一定为整数,如下所示。【示例7-3】利用months_between()函数计算两个日期之间所差的月数。【示例7-4】查询job_history表中,各个员工的工作时长。next_day()函数用于获得特定日期之后的一个星期之内的日期。例如,2012-11-11是星期日,那么,为了获得紧随其后的第一个星期一。【示例7-5】返回2012-11-11之后的第一个星期一。trunc()函数不仅可以截取数字,而且可以截取日期,其工作原理与截取数字非常相似。其使用语法如下所示。trunc(日期,截取格式)使用该函数时,不仅需要指定日期原始值,而且要指定截取格式——即截取到日期的哪个部分。【示例7-5】查询数据表job_history,将end_date日期截取到月。trunc()函数的作用为屏蔽至某个时间位。这些屏蔽位均有特定的格式代码,表7-1列出了各个屏蔽位与格式代码。屏蔽至可用格式代码世纪CC、SSC年SYYY,YYYY,YEAR,SYEAR,YYY,YY,orYISO年(一年53周,第54周的星期一为新年的开始)IYYY,IYY,IY,orI季度Q月份MONTH,MON,MM,orRM本周内与当年第一天具有相同周内天数的日期WW本周内与ISO年第一天具有相同周内天数的日期IW本周内与当月第一天具有相同周内天数的日期W天DDD,DD,orJ本周内的第一天DAY,DY,orD小时HH,HH12,HH24分钟MIcurrent_date()函数用于返回当前时区下的当前日期,我们可以结合当前时区来查看current_date()函数的使用。下面,利用该函数查看当前日期的。current_timestamp函数用于返回当前时区下的当前时间戳,我们可以结合当前时区来查看current_timestamp函数的使用。利用该函数获取当前时区下的时间戳。日期中的年、月、日、时、分、秒等可以看做日期的域。extract()函数可以从一个日期中分解出各个域。其使用语法如下所示。extract(域名,from日期)【示例7-6】为了从当前日期中分解出月份,可以利用如下所示的SQL语句。下表给出了应用于extact()函数的各域及域代码的列表。应用于extact()函数的各域及域代码的列表如下表所示。域代码说明Year获得年份Month获得月份Day获得天数Hour获得小时数Miniute获得分钟数Second获得秒数Timezone_hour获得当前时区的小时数to_char()函数不仅可以用于数值的格式化,同样可以对日期进行格式化,最后转换为字符串类型的。to_char()函数格式化日期的使用方法如下所示。to_char(日期,格式)【示例7-7】为了以YYYY-MM-DD的格式来显示当前日期,那么可以利用如下SQL语句。【示例7-7】用户任意组合的格式代码,可以获得想要的任何日期信息。在Oracle中,where子句中也可以使用日期。使用时,日期可以与Oracle中的其他逻辑运算符一起使用。【示例7-7】查询数据表job_history中,start_date在'1-1月-97'和'1-1月-12'之间的员工信息。本章讲述了Oracle中日期型的基本概念,日期型的基本应用。并详细讲述了如何利用Oracle的内置函数对日期型进行处理。本章重点是trunc()函数与to_char()函数的应用,读者应该着重把握其使用方法。在理解针对日期型的函数时,尤其要结合返回值来理解其用法。下一章将讲解Oracle中的复杂数据处理。