oracle sql日期比较
总用到时间的比较,就找了点资料,发现网上虽然说的很多,但是比较乱。然后自己也做点实验,在此记录下。。。。
1 SELECT 2 sysdate - DEADLINE, 3 DEADLINE 4 FROM T_FUNC_MISSION;
sysdate为oracle系统时间;
输出结果为: -6 8:1:34.0 2018-04-30 23:50:00.000000 显然 这样的方式是可以比较时间的,方法简单,但是有点low。
又继续查找资料:
https://www.cnblogs.com/xuxm2007/archive/2010/12/28/1918652.html
这篇介绍了很详细,但是发现好多都不是oracle能用的,基本都是SQL Server中的函数。。。。-_-||,
http://liwx.iteye.com/blog/1236382
这篇介绍的oracle都能用,但是还是有个坑。。
1 select sysdate,to_date('2009-2-20 17:45:39','yyyy-mm-dd hh24:mi:ss'), 2 ROUND(TO_NUMBER(sysdate - to_date('2009-2-20 17:45:39','yyyy-mm-dd hh24:mi:ss')) * 24 * 60) 3 from dual;
这样的sql是可以运行的,但是如果 套到自己的表中就会报错,无效的数字。
刚开始是以为to_number里的格式不对,被转换的字符串必须符合数值类型格式
to_number 是Oracle中常用的类型转换函数之一,是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反。
https://blog.csdn.net/dongdong9223/article/details/48972815 有介绍
但是为什么dual表查询的时候没报错???很奇怪。。。。
SELECT sysdate - DEADLINE FROM T_FUNC_MISSION; SELECT sysdate - to_date('2018-4-20 17:45:39', 'yyyy-mm-dd hh24:mi:ss') FROM dual;
从dual表查出的字段类型是number类型,T_FUNC_MISSION 表查的字段却是intervalds类型(时间差);
还是有些疑问:
dual表有什么不一样吗?
做下记录。。。。。