总用到时间的比较,就找了点资料,发现网上虽然说的很多,但是比较乱。然后自己也做点实验,在此记录下。。。。
SELECT
sysdate - DEADLINE,
DEADLINE
FROM T_FUNC_MISSION;
sysdate为oracle系统时间;
输出结果为: -6 8:1:34.0 2018-04-30 23:50:00.000000 显然 这样的方式是可以比较时间的,方法简单,但是有点low。
又继续查找资料:
这篇介绍了很详细,但是发现好多都不是oracle能用的,基本都是SQL Server中的函数。。。。-_-||,
这篇介绍的oracle都能用,但是还是有个坑。。
select sysdate,to_date('2009-2-20 17:45:39','yyyy-mm-dd hh24:mi:ss'),
ROUND(TO_NUMBER(sysdate - to_date('2009-2-20 17:45:39','yyyy-mm-dd hh24:mi:ss')) * 24 * 60)
from dual;
这样的sql是可以运行的,但是如果 套到自己的表中就会报错,无效的数字。
刚开始是以为to_number里的格式不对,被转换的字符串必须符合数值类型格式
to_number 是Oracle中常用的类型转换函数之一,是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反。
点击打开链接
有介绍
但是为什么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表有什么不一样吗?
做下记录。。。。。