[Hive SQL] 条件查询和时间值相关的坑

在工作中发现几个容易踩雷的问题。假设我们现在手上有个数据集,其中时间字段A格式为yyyy-MM-dd HH:mm:ss,时间字段B为A的13位毫秒时间戳格式。

假设我现在要查到2021年12月31日为止的数据,下面是不同查询方式输出的结果(仅列出查询条件)

  1. A <=
    错误示例:where A <= '2021-12-31'
    此查询方式,右边相当于只取到’2021-12-31 00:00:00’,也就是说并未包含进入31号除0时0分0秒外的数据
    正确示例:where A < '2022-01-01'
  2. A between and
    错误示例:where A between '2021-01-01' and '2021-12-31'
    此查询方式同上,仅取到 ‘2021-12-31 00:00:00’
    正确示例:where A between '2021-01-01' and '2022-01-01'
  3. B转换为yyyy-MM-dd
    正确示例:from_unixtime(cast(B/1000 as bigint), 'yyyy-MM-dd') <= '2021-12-31'
    所有的时间戳都转化为yyyy-MM-dd的格式,即使是2021-12-31 23:59:59也会转化为2021-12-31,所以能正确取到
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值