无论是 DATE 还是 timestamp 都可以进行加减操作
加一个简单的数来增加天
max,min 来求其最大最小日期
avg,sum 就只能先转成数字类型才可用
使用内置函数 add_months 来增加年和月
使用内置函数 numtoyminterval 增加年, 月
使用内置函数 numtodsinterval 增加小时, 分钟和秒
umtoyminterval 函数 -- 数字转换函数
语法: NUMTOYMINTERVAL ( n , 'char_expr' )
char_expr: 日期描述, 可以是 YEAR 和 MONTH
作用: 可以将数字转换成相应的日期单位时间
NUMTOYMINTERVAL ( 1, 'MONTH' ) 表示一个月
NUMTOYMINTERVAL ( 1, 'YEAR' ) 表示一年
numtodsinterval 函数 -- 数字转换函数
语法: NUMTOYMINTERVAL ( n , 'char_expr' )
char_expr: 日期描述, 可以是 day,hour,minute,second
作用: 可以将数字转换成相应的日期单位时间
NUMTOYMINTERVAL ( 1, 'day' ) 表示一天
NUMTOYMINTERVAL ( 1, 'hour' ) 表示一个小时
通常当我们使用 add_month 添加月时, 如果输入是本月月底的日期, 那么得到的也是月底的日期,
比如 add_months(to_date('2007-02-28','yyyy-mm-dd'),1) 得到的就会是'2007-03-31', 而不是'2007-03-28'.
此时, 如果使用的是 to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(1,'month'), 那么得到的就是'2007-03-28'.
例子示范
对当前日期增加一个小时:
- 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 ;
- DT
- ----
- 1240.01623
来源: http://www.bubuko.com/infodetail-2977865.html