HiveSQL之datediff、date_add、date_sub详解及注意坑点

文章目录

  • datediff
    • 介绍:
    • 示例1:正常情况
    • 示例2:负值情况
    • 注意:
    • 使用场景示例
    • 总结
  • date_add
    • 介绍:
  • date_sub
    • 介绍:
  • 注意:

datediff

介绍:

datediff语法: datediff(string enddate,string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数
注意:可能出现结束日期小于开始日期的场景,即返回值可能是负值

示例1:正常情况

select datediff(‘20230620’, ‘20230615’);
HiveSQL之datediff、date_add、date_sub详解及注意坑点_第1张图片

这个结果是在Mysql中测试的,HiveSQL等同

示例2:负值情况

elect datediff(‘2023-06-10’, ‘2023-06-15’);
HiveSQL之datediff、date_add、date_sub详解及注意坑点_第2张图片

注意:

MySQL和HiveSQL还是有一些区别,如下:
在HiveSQL中select datediff(‘20230610’, ‘20230615’);计算值为null,HiveSQL要求日期格式为:‘yyyy-MM-dd’

使用场景示例

计算startdate后30天内的结果
datediff(enddate, startdate)<=30 and datediff(enddate, startdate) >=0
使用如上条件进行限制判断
注意这里的坑点:一定要限制datediff(enddate, startdate) >=0 (或>0 看场景需求)真实环境数据不一定能保证enddate 大于 startdate,可能会出现很难发现的bug
同理可以用于其他一些计算日期值下的场景

这里给到几个测试实例:

select if(datediff('20230628','20230621')<=7,1,0)
select if(datediff('2023-06-28','2023-06-21')<=7,1,0)
select if(datediff('2023-06-28','2023-06-28')<=7,1,0)
select if(datediff('2023-06-28','')<=7,1,0)
select if(datediff('2023-06-28','2023-06-29')>=0 and datediff('2023-06-28','2023-06-29')<=7,1,0)

可以自行验证

总结

时间判断可能是一个比较简单且小的话题,但是时间判断出错会导致指标计算或取数的重大错误,一定要限制清楚

date_add

介绍:

date_add语法: date_add(string startdate, intdays)
返回值: string
说明: 返回开始日期startdate增加days天后的日期
select date_sub(‘2022-2-28’,10)

date_sub

介绍:

date_sub语法: date_sub (string startdate,int days)
返回值: string
说明: 返回开始日期startdate减少days天后的日期
select date_add(‘2022-2-28’,10)

注意:

在HiveSQL中使用上面三个日期函数,日期格式都是’yyyy-MM-dd’,否则计算结果不正确,例如使用’yyyyMMdd’格式的,计算结果不正确,一定要注意坑点

你可能感兴趣的:(BigData,大数据,HiveSQL)