关于trino中date_diff函数的说明

工作中遇到了一个问题,就是关于trino中的date_diff函数用来求两个timestamp类型(格式:2022-05-01 00:00:00)的时间相减后的天数,当时不知道,数据对不上,后来才发现是这个原因导致的。希望对大家有帮助。

请看示例:

示例1:这种情况没有问题,天数是对的

select date_diff('day',cast('2022-05-01 23:45:09' as TIMESTAMP),
cast('2022-05-03 23:56:31' as timestamp))
---------------结果:----------------
2

示例2:这种情况就不对了,求出来的天数的0

select date_diff('day',cast('2022-05-01 23:45:09' as TIMESTAMP),
cast('2022-05-02 03:56:31' as timestamp));
-------------结果:-----------------
0

有人认为这结果没有问题,是对的,就应该是0,这么说没有问题,因为考虑到小时,从小时算还不满24个小时,所以就没有到一天。但是,比如这么算:您是2021年10月20日租的房子,签的合同,是不是10月20日就生效了,房东会管你这个合同是10月20日几点签订的吗?不会对吧,那么2022年10月19日房子是不是最后一天了,2022年10月20日就是新合同的第一天,与上一份合同是不是差了一天呢?这么想不就有问题了吗??

结论:date_diff计算如示例2的情况是,会按小时去算,小时间隔为24小时的算间隔一天,不满24小时的算为间隔0天。

解决方案:转换为date类型,在相减,得到正确结果。

select date_diff('day',date(format_datetime(cast('2022-05-01 23:45:09' as TIMESTAMP),'yyyy-MM-dd')),
date(format_datetime(cast('2022-05-02 03:56:31' as timestamp),'yyyy-MM-dd'))) 
------------结果:------------------
1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值