ITPub博客

首页 > 数据库 > Oracle > Oracle   SQL函数(七) Hacker

Oracle   SQL函数(七) Hacker

Oracle 作者:happy280156893 时间:2013-11-20 18:06:17 0 删除 编辑

三 时间和日期函数

时间值函数用于获取或处理时间值和时间戳。表3-1给出了一些时间值函数,其中x表示一个时间值或时间戳。

表3-1 时间值函数

函    数

说    明

ADD_MONTHS(x,y)

返回x加上一个月后的的结果。如果y是负数,就从x中间去y个月

LAST_DAY(x)

返回包含x的月的最后一天

MONTHS_BETWEEN(x,y)

返回x和y之间有几个月。如果x在日历中比y晚,则返回值为正数,否则为负数

NEXT_DAY(x,day)

返回从x开始,下一个day出现的时间;day是一个文本字符串,例如SATURDAY

 

 

ROUND(x[,unit])

对x取整。默认情况下,x取整为最近的 。unit是一个可选字符串参数,它指明要取整的单元。例如,YYYY表示将x取整为最近一年的第一天

SYSDATE

返回数据库服务器所在的操作系统设置的当前时间

TRUNC(x[,unit])

对x截断。默认情况下,x被截断为当天的开始时间。Unit是一个可选字符串参数,它指名要截断的单元。例如,MM表示将x截断为该月的第一天

3.1  ADD_MONTHS函数

ADD_MONTHS(x, y)用于计算x加上y个月的结果。如果y是负数,就从x中减去y个月。下面这个例子在2007年1月1日上加上13个月:

 SELECT ADD_MONTHS('01-JAN-2007', 13)

FROM dual;

ADD_MONTH
---------
01-FEB-08

下面这个例子从2008年1月1日中减去13个月;注意本例实际上是使用ADD_MONTHS 函数在这个日期上加上-13个月:

 SELECT ADD_MONTHS('01-JAN-2008', -13)
FROM dual;

ADD_MONTH
---------
01-DEC-06

ADD_MONTHS函数可以用于时间和日期。例如,下面这个查询在时间值2007年1月1日下午7点15分26秒上增加两个月:

 SELECT ADD_MONTHS(TO_DATE('01-JAN-2007 19:15:26',
     'DD-MON-YYYY HH24:MI:SS'), 2)
     FROM dual;

ADD_MONTH
---------
01-MAR-07

下面这个查询重写了上面这个例子:它使用TO_CHAR函数将从ADD_MONTHS函数中返回的时间值转换为字符串,并指定格式为DD-MON-YYYY HH24:MI:SS:

 SELECT TO_CHAR(ADD_MONTHS(TO_DATE('01-JAN-2007 19:15:26',
'DD-MON-YYYY HH24:MI:SS'), 2), 'DD-MON-YYYY HH24:MI:SS')
FROM dual;

TO_CHAR(ADD_MONTHS(T
--------------------
01-MAR-2007 19:15:26

注意:

表5-6中列出的所有函数都既可以用于时间,又可以用于日期

3.2  LAST_DAY函数

LAST_DAY函数用于计算包含x的月的最后一天。下面这个例子显示了2008年1月的最后一天:

 SELECT LAST_DAY('01-JAN-2008')
FROM dual;

LAST_DAY(
---------
31-JAN-08

3.3  MONTHS_BETWEEN函数

MONTHS_BETWEEN (x, y)用于计算x和y之间有几个月。如果x在日历中比y早,那么MONTHS_BETWEEN()就返回一个负数。

注意:

在调用MONTHS_BETWEEN函数时,日期的次序非常重要:如果想让结果为正数,稍晚的时间必须出现在前面。

下面这个例子显示了2013年5月25日和2013年1月15日之间相差的月数。注意由于第一个参数是稍后的日期(2013年5月25日),因此所返回的结果是正数:

 SELECT MONTHS_BETWEEN('25-MAY-2013', '15-JAN-2013')
     FROM dual;

MONTHS_BETWEEN('25-MAY-2013','15-JAN-2013')
-------------------------------------------
4.32258065

下面这个例子调用MONTHS_BETWEEN函数时使用相同的日期,但是颠倒了这两个参数的次序,因此返回值为负数:

 SELECT MONTHS_BETWEEN('15-JAN-2013', '25-MAY-2013')
FROM dual;

MONTHS_BETWEEN('15-JAN-2013','25-MAY-2013')
-------------------------------------------
-4.3225806

3.4  NEXT_DAY函数

NEXT_DAY(x, day)用于计算从x开始,下一个day的日期;参数day是一个文本字符串,例如SATURDAY。

下面这个例子显示了2013年1月1日之后的下一个星期六的日期:

 SELECT NEXT_DAY('01-JAN-2013', 'SATURDAY')
FROM dual;

NEXT_DAY(
---------
05-JAN-13

3.5  ROUND函数

ROUND(x [, unit])用于对x取整。默认情况下,x取整为最近的一天。unit是一个可选字符串参数,它指明要取整的单元。例如,YYYY表示将x取整为最近一年的第一天。

下面这个例子使用ROUND函数对2008年10月25日取整,取整为最近一年的第一天,因此结果是2009年1月1日。注意本例中指定的日期是25-OCT-2008,并对它使用一个TO_DATE函数进行了转换:

 SELECT ROUND(TO_DATE('25-OCT-2008'), 'YYYY')
FROM dual;

ROUND(TO_
---------
01-JAN-09

下面这个例子使用ROUND函数对2008年5月25日取整,取整为最近一月的第一天,最终结果是2008年6月1日,因为5月25日距6月1日比距5月1日近得多:

 SELECT ROUND(TO_DATE('25-MAY-2008'), 'MM')
FROM dual;

ROUND(TO_
---------
01-JUN-08

下面这个例子对2008年5月25日晚上7点45分26秒取整,取整为最近的小时,因此是晚上8点整:

 SELECT  TO_CHAR(ROUND(TO_DATE('25-MAY-2008 19:45:26',
'DD-MON-YYYY HH24:MI:SS'), 'HH24'), 'DD-MON-YYYY HH24:MI:SS')
FROM dual;

TO_CHAR(ROUND(TO_DAT
--------------------
25-MAY-2008 20:00:00

3.6  SYSDATE

SYSDATE返回数据库服务器的操作系统中设置的当前时间值。下面这个例子获取当前日期:

 SELECT SYSDATE
FROM dual;

SYSDATE
---------
05-NOV-13

3.7  TRUNC函数

TRUNC(x [, unit])用于对x截断。默认情况下,x被截断为当天的开始时间。unit是一个可选字符串参数,它指明要截断的单元。例如,MM表示截断为该月的第一天。

下面这个例子使用TRUNC函数对2008年5月25日进行截断,截断为当年的第一天,因此结果是2008年1月1日:

 SELECT TRUNC(TO_DATE('25-MAY-2008'), 'YYYY')
FROM dual;

TRUNC(TO_
---------
01-JAN-08

下面这个例子对2008年5月25日进行截断,截断为当月的第一天,最终结果是2008年5月1日:

 SELECT TRUNC(TO_DATE('25-MAY-2008'), 'MM')
FROM dual;

TRUNC(TO_
---------
01-MAY-08

下面这个例子对2008年5月25日晚上7点45分26秒进行截断,截断为小时,因此是晚上7点整:

 SELECT TO_CHAR(TRUNC(TO_DATE('25-MAY-2008 19:45:26',
'DD-MON-YYYY HH24:MI:SS'), 'HH24'), 'DD-MON-YYYY HH24:MI:SS')
FROM dual;

TO_CHAR(TRUNC(TO_DAT
--------------------
25-MAY-2008 19:00:00

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23399034/viewspace-1115214/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-02-25