oracle中常用的 SQL语句中进行时间加减

一:

numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,
表明x的单位,这个函数把x转为interval day to second数据类型

常用的单位有 ('day','hour','minute','second')

example

SQL> select sysdate,sysdate+numtodsinterval(3,'hour') as res from dual;

SYSDATE             RES ------------------- -------------------

2007-09-05 01:45:34   2007-09-05 04:45:34

numtoyminterval 与numtodsinterval函数类似,将x转为interval year to month数据类型

常用的单位有'year','month'

example

SQL> select sysdate,sysdate+numtoyminterval(3,'year') as res from dual;

SYSDATE             RES ------------------- -------------------

2007-09-05 01:54:53   2010-09-05 01:54:53

-----------------------------------------------------------------------------------------------------------------------

格式:NumToYMInterval(n, interval_unit);

n: 数值类型

interval_unit: 'YEAR', 'MONTH' ,或其他可以转换成这两个值之一的表达式

NumToYMInterval(1, 'YEAR') :一年后的间隔

NumToYMInterval(-1, 'MONTH'): 一个月前

小数会被计算成整数后,再做计算:

select sysdate + numtoyminterval(0.1, 'MONTH')  as future from dual;\

FUTURE

------------------

11-OCT-13

该函数的结果是:”INTERVAL YEAR TO MONTH literal“。不能与数值做运算。

select 1 + NumToYMInterval(1, 'MONTH') from dual

Oracle会返回一个错误。

做日期运算时,这个函数非常有用。例如:取一个月后的日期:

select sysdate + NumToYMInterval(1, 'MONTH') from dual;

加法 
select sysdate,add_months(sysdate,12) from dual;         --加1年
select sysdate,add_months(sysdate,1) from dual;         --加1月
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;    --加1星期
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;    --加1天
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;   --加1小时
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;   --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒

减法
select sysdate,add_months(sysdate,-12) from dual;         --减1年
select sysdate,add_months(sysdate,-1) from dual;         --减1月
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual;    --减1星期
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual;    --减1天
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual;   --减1小时
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;   --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒

对当前日期增加一个小时:
SQL> select sysdate, sysdate+numtodsinterval(1,’hour’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:38:19 2010-10-14 22:38:19
对当前日期增加50分种
SQL> select sysdate, sysdate+numtodsinterval(50,’minute’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:39:12 2010-10-14 22:29:12
对当前日期增加45秒
SQL> select sysdate, sysdate+numtodsinterval(45,’second’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:40:06 2010-10-14 21:40:51
对当前日期增加3天
SQL> select sysdate, sysdate+3 from dual ;

SYSDATE             SYSDATE+3
——————- ——————-
2010-10-14 21:40:46 2010-10-17 21:40:46
对当前日期增加4个月
SQL> select sysdate, add_months(sysdate,4) from dual ;

SYSDATE             ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:41:43 2011-02-14 21:41:43

当前日期增加2年
SQL> select sysdate, add_months(sysdate,12*2) from dual ;

SYSDATE             ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:42:17 2012-10-14 21:42:17

timestamp的操作方法与上面类似;
求两个日期之差:
例:求2007-5-23 21:23:34与当前时间之间的差值。
SQL> select sysdate-to_date(’20070523 21:23:34′,’yyyy-mm-dd hh24:mi:ss’) dt from
dual ;

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值