欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle 日期相关 博客分类: DB-Oracle  

程序员文章站 2024-03-16 12:15:58
...
--查询某一天内的数据
select t.ID,t.LAST_TIME
		from T_ORDER t WHERE 
			--AND t.LAST_TIME >= to_date('2017-07-31 00:00:00','yyyy-mm-dd hh24:mi:ss') 
			t.LAST_TIME >= to_date('2017-07-31','yyyy-mm-dd') -- 2017-07-31 00:00:00
			--AND t.LAST_TIME <= to_date('2017-07-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
			AND t.LAST_TIME < (to_date('2017-07-31','yyyy-mm-dd') + 1) -- 2017-08-01 00:00:00
;

--查询某一月内的数据
select t.ID,t.LAST_TIME
		from T_ORDER t WHERE 
			--AND two.LIMIT_LAST_TIME >= to_date('2017-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss') 
			t.LAST_TIME >= to_date('2017-07','yyyy-mm') -- 2017-07-01 00:00:00
			--AND two.LIMIT_LAST_TIME <= to_date('2017-07-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
			AND t.LAST_TIME < add_months(to_date('2017-07','yyyy-mm'), 1) -- 2017-08-01 00:00:00
;

--查询某一年内的数据
select t.ID,t.LAST_TIME
		from T_ORDER t WHERE 
			--AND two.LIMIT_LAST_TIME >= to_date('2017-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss') 
			t.LAST_TIME >= to_date('2017-01','yyyy-mm') -- 2017-01-01 00:00:00
			--AND two.LIMIT_LAST_TIME <= to_date('2017-12-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
			AND t.LAST_TIME < to_date('2018-01','yyyy-mm') -- 2018-01-01 00:00:00
;

 

 

值得注意地:

--只转换年份,会得到当月1日的日期
select to_date('2017','yyyy') AS test from dual;--2017-07-01 00:00:00

 

 日期之间的差:

--两个日期相减为相差的天数:1
select (To_date('2017-07-05 09:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2017-07-04 09:00:00' , 'yyyy-mm-dd hh24-mi-ss')) AS test FROM DUAL; 
--两个日期相减为相差的天数:-0.5
select (To_date('2017-07-03 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2017-07-03 12:00:00' , 'yyyy-mm-dd hh24-mi-ss')) AS test FROM DUAL; 
--两个日期相差的小时:0.02
select (To_date('2017-07-04 09:01:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2017-07-04 09:00:00' , 'yyyy-mm-dd hh24-mi-ss')) * 24 AS test FROM DUAL; 
--两个日期相差的小时:1。ceil(n):取大于等于n的最小整数
select ceil((To_date('2017-07-04 09:01:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2017-07-04 09:00:00' , 'yyyy-mm-dd hh24-mi-ss')) * 24) AS test FROM DUAL; 
--两个日期相差的小时:0。floor(n):取小于等于n的最大整数
select floor((To_date('2017-07-04 09:01:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2017-07-04 09:00:00' , 'yyyy-mm-dd hh24-mi-ss')) * 24) AS test FROM DUAL; 
--两个日期相差的分钟:61.00
select (To_date('2017-07-04 10:01:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2017-07-04 09:00:00' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 AS test FROM DUAL; 

 值得注意地:两个日期不能直接相加。日期加数字,数字为天数。

 

 interval:(时间)间隔

--interval:(时间)间隔
select sysdate,',',interval '10' SECOND ,',',
	interval '10' MINUTE ,',',
	interval '10' HOUR ,',',
	interval '10' DAY ,',',
	interval '10' MONTH ,',',
	interval '10' YEAR  
from dual;
--2017-08-02 18:22:25, 0 0:0:10.0, 0 0:10:0.0, 0 10:0:0.0, 10 0:0:0.0, 0-10, 10-0

--当前时间减10分钟的时间
select sysdate,sysdate - interval '10' minute from dual;
--2017-08-02 18:08:03	2017-08-02 17:58:03

--当前时间加10分钟的时间
select sysdate,sysdate + interval '10' minute from dual;
--2017-08-02 18:08:37	2017-08-02 18:18:37