oracle sql日期比较

总用到时间的比较,就找了点资料,发现网上虽然说的很多,但是比较乱。然后自己也做点实验,在此记录下。。。。
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表有什么不一样吗?

做下记录。。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值