MySQL之 INTERVAL
来源:互联网 发布:中国河北网络电视 编辑:程序博客网 时间:2024/06/05 22:55
转自:http://blog.csdn.net/holly2008/article/details/23629351
一、INTERVAL YEAR TO MONTH / INTERVAL DAY TO SECOND
语法:
INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]
这是求精确的时间间隔,把一段间隔时间明细化的一种方法
Interval year(precision) to month
precision是这个时限的年部分所要求的最大位数。 默认为2,范围为0~9
Interval day(d_precision) to second(s_precision)
d_precision是这个时限的天部分所要求的最大位数,默认为2,范围也是0~9
s_precision是这个时限的秒部分所要求的小数点右边的位数,默认为6,范围是0~9
例如:
问你进入公司多少年了? 这个很容易答出来
问你进入公司多少天了? 这个就比较麻烦了,因为月份不同,天数不同,还涉及到闰年
而这种类型就能给取出非常准确的时间间隔
例如:计算SCOTT至今为止在公司多久了.
year to month 返回27年0个月
day to second 返回9857天11小时49分22秒....
SQL> SELECT (sysdate - hiredate) YEAR TO MONTH time FROM emp where ename='SCOTT';
TIME
------------
+27-00
SQL> SELECT (sysdate - hiredate) DAY(9) TO SECOND time FROM emp where ename='SCOTT';
TIME
-----------------------------
+000009857 11:49:22.000000
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select sysdate + INTERVAL '1-2' YEAR TO MONTH from dual;
SYSDATE+INTERVAL'1-
-------------------
2015-06-14 11:42:24
表示: 当前系统时间 + 1年2个月
INTERVAL '123' YEAR(3)
表示: 123年0个月, "YEAR(3)" 表示年的精度为3, "123"刚好为3为有效数值, 如果该处YEAR(n), n<3就会出错, 注意默认是2.
SQL> select sysdate + INTERVAL '123' YEAR from dual;
select sysdate + INTERVAL '123' YEAR from dual
*
ERROR at line 1:
ORA-01873: the leading precision of the interval is too small
INTERVAL '300' MONTH(3)
表示: 300个月, 注意该处MONTH的精度是3.
INTERVAL '4' YEAR
表示: 4年, 同 INTERVAL '4-0' YEAR TO MONTH 是一样的
INTERVAL '20' MONTH
表示: 20个月, 同 INTERVAL '1-8' YEAR TO MONTH 是一样
INTERVAL '5-3' YEAR TO MONTH + INTERVAL '20' MONTH = INTERVAL '6-11' YEAR TO MONTH
表示: 5年3个月 + 20个月 = 6年11个月
二、NUMTOYMINTERVAL /NUMTODSINTERVAL
NUMTODSINTERVAL(n, 'interval_unit')
将n转换成interval_unit所指定的值, interval_unit可以为: DAY, HOUR, MINUTE, SECOND
注意:该函数不可以转换成YEAR和MONTH的.
NUMTOYMINTERVAL(n, 'interval_unit')
interval_unit可以为: YEAR, MONTH
SQL> select sysdate,sysdate+numtodsinterval(3,'hour') as res from dual;
SYSDATE RES
--------------------------- -------------------------------
2014-04-14 13:37:09 2014-04-14 16:37:09
SQL> select numtodsinterval(100,'DAY') from dual;
NUMTODSINTERVAL(100,'DAY')
---------------------------------------------------------------------------
+000000100 00:00:00.000000000
SQL> select numtodsinterval(100,'SECOND') from dual
NUMTODSINTERVAL(100,'SECOND')
---------------------------------------------------------------------------
+000000000 00:01:40.000000000
SQL> select numtodsinterval(100,'MINUTE') from dual
NUMTODSINTERVAL(100,'MINUTE')
--------------------------------------------------------------------------
+000000000 01:40:00.000000000
SQL> select numtodsinterval(100,'HOUR') from dual
NUMTODSINTERVAL(100,'HOUR')
---------------------------------------------------------------------------
+000000004 04:00:00.000000000
SQL> select numtodsinterval(100,'YEAR') from dual
select numtodsinterval(100,'YEAR') from dual
*
ERROR at line 1:
ORA-01760: illegal argument for function
SQL> select numtoyminterval(100,'year') from dual;
NUMTOYMINTERVAL(100,'YEAR')
---------------------------------------------------------------------------
+000000100-00
SQL> select numtoyminterval(100,'month') from dual
NUMTOYMINTERVAL(100,'MONTH')
---------------------------------------------------------------------------
+000000008-04
时间的计算:
SQL> select to_date('2014-2-12','yyyy-mm-dd') - to_date('2014-2-01','yyyy-mm-dd') TIME from dual;
TIME
--------------
11
-- 可以相减的结果为天.
SQL> select to_date('2013-01-12','yyyy-mm-dd') - to_date('2014-2-01','yyyy-mm-dd') time from dual;
TIME
-------------------
-385
-- 也可以为负数的
下面看看INTERVAL YEAR TO MONTH怎么用.
SQL> create table test(a date, b date, c interval year(9) to month);
Table created.
SQL> desc test
Name Null? Type
----------------- -------- ---------------------------
A DATE
B DATE
C INTERVAL YEAR(9) TO MONTH
SQL> insert into test values(to_date('2014-2-12','yyyy-mm-dd'),to_date('2014-2-01','yyyy-mm-dd'), null);
1 row created.
SQL> insert into test values(to_date('2013-01-12','yyyy-mm-dd'),to_date('2014-2-01','yyyy-mm-dd'), null);
1 row created.
SQL> update test set c = numtoyminterval(a-b, 'year');
2 rows updated.
SQL> select * from test;
A B C
------------------- ------------------- ---------------
2014-02-12 00:00:00 2014-02-01 00:00:00 +000000011-00
2013-01-12 00:00:00 2014-02-01 00:00:00 -000000385-0
- MySQL之 INTERVAL
- LeetCode之Insert Interval
- LeetCode之Merge Interval
- leetcode之Insert Interval
- AngularJS之定时器(interval)
- 17-service之$interval
- Oracle日期计算之INTERVAL
- leetcode之Insert Interval 问题
- interval
- INTERVAL
- interval
- mysql 中 DATE_ADD(date,INTERVAL expr type)
- 11g新特性之interval partition
- LeetCode之Insert Interval--二分查找
- 每日算法之四十:Insert Interval
- LeetCode进阶之路(Insert Interval)
- 一元购宝倒计时之angularJs-$interval
- SQL学习之:INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND
- 赛下六首
- Linux下安装MongoDB复制集+用户认证,与Spring集成操作
- opencv 跟踪黑色区域, 摄像头读取
- CF822E,巧妙的字符串DP
- es6系列-promise
- MySQL之 INTERVAL
- 一些简单的操作符号
- Java图片处理开源框架(01)
- Redis入门
- 王爽.汇编.第三版.课程设计1.答案
- Debug和Release编译方式的本质区别
- jquery如何让所有表单元素均为只读
- 【剑指offer】题30:最小的k个数
- JQuery Ui 实例 W3Cschool