Clickhouse求时间差

本文详细介绍了如何在SQL中使用dateDiff函数计算两个日期或时间戳的时差,包括不同时间单位的使用、处理空值的最佳实践,并列举了常见应用场景。

dateDiff 函数:返回两个Date或DateTime类型之间的时差

#语法
dateDiff('unit', startdate, enddate, [timezone])

#参数解释
unit—返回结果的时间单位,String类型
支持的时间单位: second, minute, hour, day, week, month, quarter, year

startdate — 第一个待比较值。 Date 或 DateTime.

enddate — 第二个待比较值。 Date 或 DateTime.

timezone — 可选参数。 如果指定了,则同时适用于startdate和enddate。
如果不指定,则使用startdate和enddate的时区。如果两个时区不一致,则结果不可预料。

正常情况,startdate 和 enddate 都没有空值,例如:

SELECT dateDiff('hour', toDateTime('2022-01-01 20:00:00'), toDateTime('2022-01-02 23:00:00'));

如果两个时间戳有一方或者两方都可能含有空值,使用dateDiff 函数前需要先处理空值(给它一个默认值),否则会报类型转换异常错误,例如:

select if(birth_day == '', toString(toDate(now())), birth_day) as birth,
       dateDiff('year', toDate(birth), toDate(now()))          as age
from ods_ssd.sms_base_patient;

注意:DateTime 的最小值为 1970-01-01 00:00:00 ,出生日期这类字段不能使用DateTime或者Date,时间戳类型值精确到秒(没有闰秒)。值的范围: [1970-01-01 00:00:00, 2106-02-07 06:28:15]。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值