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表有什么不一样吗?

做下记录。。。。。

 

  

  

猜你喜欢

转载自www.cnblogs.com/startLearning/p/8931334.html