gpt4 book ai didi

clickhouse - ClickHouse 中的时间比较

转载 作者:行者123 更新时间:2023-12-02 03:09:34 24 4
gpt4 key购买 nike

也许我错过了一些简单的事情,但我无法使时间过滤工作。

这是我的示例查询:

select toTimeZone(ts, 'Etc/GMT+2') as z
from (select toDateTime('2019-08-31 20:35:00') AS ts)
where z > '2019-08-31 20:34:00'

我期望 0 个结果,但得到:

2019-08-31T18:35:00+00:00

这是一个错误,还是我滥用了 toTimeZone() 函数?

谢谢!

最佳答案

ClickHouse 将 DateTime 存储为 Unix 时间戳 - 换句话说,没有时区。但执行 sql 查询时会考虑时区:

SELECT
toDateTime('2019-08-31 20:35:00', 'UTC') AS origin_date,

toTimeZone(origin_date, 'Etc/GMT+2') AS d1,
toTypeName(d1) AS type1,
toUnixTimestamp(d1) AS t1,

toTimeZone(origin_date, 'UTC') AS d2,
toTypeName(d2) AS type2,
toUnixTimestamp(d2) AS t2
FORMAT Vertical

Row 1:
──────
origin_date: 2019-08-31 20:35:00

d1: 2019-08-31 18:35:00
type1: DateTime('Etc/GMT+2')
t1: 1567283700 # <-- t1 == t2

d2: 2019-08-31 20:35:00
type2: DateTime('UTC')
t2: 1567283700 # <-- t1 == t2

您的查询工作正常。

要“重置时区”z-date 可以这样使用:

SELECT toDateTime(toString(toTimeZone(ts, 'Etc/GMT+2'))) AS z
FROM
(
SELECT toDateTime('2019-08-31 20:35:00') AS ts
)
WHERE z > '2019-08-31 20:34:00'

关于clickhouse - ClickHouse 中的时间比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com