文章目录
- datediff
- 介绍:
- 示例1:正常情况
- 示例2:负值情况
- 注意:
- 使用场景示例
- 总结
- date_add
- 介绍:
- date_sub
- 介绍:
- 注意:
datediff
介绍:
datediff语法: datediff(string enddate,string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数
注意:可能出现结束日期小于开始日期的场景,即返回值可能是负值
示例1:正常情况
select datediff(‘20230620’, ‘20230615’);
这个结果是在Mysql中测试的,HiveSQL等同
示例2:负值情况
elect datediff(‘2023-06-10’, ‘2023-06-15’);
注意:
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’格式的,计算结果不正确,一定要注意坑点