Clickhouse求时间差

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]。

### ClickHouse 中日期时间函数概述 ClickHouse 提供了一系列用于处理日期和时间数据的内置函数。这些函数可以分为几类,包括常用的时间函数、获取未来或过去时间的函数以及计算两个时刻之间差异的函数。 #### 常用时间函数 一些最常使用的日期时间函数如下: - `now()` 返回当前服务器时间戳。 - `today()` 获取今天的日期部分。 - `yesterday()` 获取昨天的日期。 - `formatDateTime(datetime, format)` 将给定的时间按照指定格式返回字符串表示形式[^3]。 ```sql SELECT formatDateTime(now(), '%Y-%m-%d') AS formatted_date; ``` 此查询会将当前时间按`%Y-%m-%d`模式格式化并显示出来。 #### 转换字符串到时间类型 为了能够操作存储为字符串的数据作为实际的时间值,可利用特定转换函数如`toDateTime(string)` 或者带有更精确控制参数版本`parseDateTimeBestEffort(string[, utc_offset])`来完成这一过程[^4]。 ```sql SELECT toDateTime('2022-02-12 12:11:11'); ``` 上述SQL语句将会把输入字符串解析成相应的时间对象。 #### 计算两个时间点之间的差距 当涉及到比较不同时刻间的间隔时,有多种方式实现这一点;其中一种简单的方法就是通过减法运算符直接相减得到秒数差,之后再除以所需的单位长度(例如60获得分钟级的结果)。另外还有专门设计好的辅助工具比如`timeDiffSecond`, `timeDiffMinute`, `timeDiffHour`等可以直接得两段时间相差的具体数值[^1]。 ```sql SELECT timeDiffDay(toDate('2023-07-08'), toDate('2023-07-09')) AS day_difference; ``` 这段代码用来计算两天之间的天数差别。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值