Clickhouse SQL日期处理函数及案例分享
适用场景
高性能数据集,以及Clickhouse直连数据集。
注意事项
所有涉及到时分秒(DateTime字段)的函数都可能需要时区参数 timezone,时区格式一般为UTC时区或地理位置的IANA标识符(例如 Europe/Moscow),未指定时区则默认转换为服务器的时区(例如世界标准时间UTC)。
函数大小写敏感,必须按照官方写法使用大小写混写。全部使用大写或小写会引起报错。
以下函数非全部可用函数,是基于BI当前所用19版本汇编而成的常用函数。更多函数请参考Clickhouse官方网站Dates and Times。
日期支持函数
时间或日期截取函数
——原字段为日期(date)或日期时间(datetime/timestamp), 返回非日期。
时间或日期截取函数
——原字段为日期(date)或日期时间(datetime/timestamp), 返回日期或时间。
日期或时间日期生成函数
日期时间计算
日期与时间日期转化
案例
案例一:文本类型日期转换为标准日期格式
案例二:标准日期转换为文本类型案例
附录:
formatDateTime 函数支持的格式修饰符
“举例”列是对2018-01-02 22:33:44的格式化结果:
周数计算需要使用mode参数。
该参数可以指定星期是从星期日还是星期一开始,以及返回值应在0到53还是从1到53的范围内。取值范围 [0,9],如果省略了mode参数,则默认模式为0。使用mode参数的函数有 toWeek(date[,mode]),toYearWeek(date[,mode]),toStartOfWeek(t[,mode])。
toISOWeek()是一个兼容函数,等效于toWeek(date,3)。
下表描述了mode参数的工作方式:
对于象“with 4 or more days this year,”的mode值,根据ISO 8601:1988对周进行编号:
如果包含1月1日的一周在后一年度中有4天或更多天,则为第1周。
否则,它是上一年的最后一周,下周是第1周。
对于像“contains January 1”的mode值, 包含1月1日的那周为本年度的第1周。