Clickhouse 时区转换
我们知道在mysql 进行时间的时区转换,可以通过 CONVERT_TZ(dt,from_tz,to_tz),其中dt 是datetime 数据类型;从from_tz 时区转换为to_tz时区,from_tz 可以是任何时区,其中数据库默认时区是UTC
1 /*Mysql从UTC 时区转换成 香港时区(+08:00)*/
SELECT CONVERT_TZ(‘2020-04-06 02:00:00‘,‘UTC‘,‘Asia/Hong_Kong‘) as DateTime
2020-04-06 10:00:00
2 /*Mysql从 香港时区转换美国纽约时区 */
SELECT CONVERT_TZ(‘2020-04-06 02:00:00‘,‘Asia/Hong_Kong‘,‘America/New_York‘) as DateTime
2020-04-05 14:00:00
Clickhoue 的from_tz 是默认系统时区,比如UTC 是系统的时区:
Select toString(toDateTime(‘2020-04-06 02:00:00‘), ‘Asia/Hong_Kong‘) AS time_Hong_Kong
2020-04-06 10:00:00
Clickhouse 如果系统默认时间是跟from_tz 时区是一样的,可以不写
select toTimeZone(toDateTime(‘2020-04-06 02:00:00‘, ‘UTC‘), ‘Asia/Hong_Kong‘) , toString(toDateTime(‘2020-04-06 02:00:00‘,‘UTC‘), ‘Asia/Hong_Kong‘) , toTimeZone(toDateTime(‘2020-04-06 02:00:00‘), ‘Asia/Hong_Kong‘) ,/*系统默认时间是UTC时区,可以不用写UTC 时间*/ toString(toDateTime(‘2020-04-06 02:00:00‘), ‘Asia/Hong_Kong‘) ,/*系统默认时间是UTC时区,可以不用写UTC 时间*/ toTimeZone(toDateTime(‘2020-04-06 02:00:00‘, ‘America/New_York‘), ‘Asia/Hong_Kong‘)
通过上面的例子,大家会发现toTimeZone,与toString 的功能很像,其实我们通过toTypeName这个函数就可以知道它们的区别
select toTypeName(toTimeZone(toDateTime(‘2020-04-06 02:00:00‘, ‘UTC‘), ‘Asia/Hong_Kong‘)) , toTypeName(toString(toDateTime(‘2020-04-06 02:00:00‘,‘UTC‘), ‘Asia/Hong_Kong‘)) , toTypeName(formatDateTime(toTimeZone(toDateTime(‘2020-04-06 02:00:00‘, ‘UTC‘), ‘Asia/Hong_Kong‘),‘%F %T‘)) ;
嘻嘻,运行一下上面的代码,你就会知道了。
toTimeZone函数还是比较强大,通过可以实现时区转换,通过toTypeName还可以获知字段类型,以及该字段对应的时区。
原文:https://www.cnblogs.com/thxj/p/12642041.html