datetime - 动态更改 DateTime64 时区(使用表中的时区)
问题描述
我想将时间戳转换为从另一个表动态获取的时区。我的第一次尝试是将我的数据表与包含时区的表连接起来,然后使用toTimeZone
函数进行转换。但是,我发现动态传入时区时不会发生转换:
SELECT
ts,
tzs.timezone,
toTimeZone(ts, 'America/New_York') AS ts_ny1, <-- manual, works
toTypeName(ts_ny1) AS ts_ny1_type,
toTimeZone(ts, tzs.timezone) AS ts_ny2, <-- dynamic, doesn't work
toTypeName(ts_ny2) AS ts_ny2_type,
toTimeZone(ts, toString(tzs.timezone)) AS ts_ny3, <-- dynamic, doesn't work
toTypeName(ts_ny3) AS ts_ny3_type
FROM my_db.my_timestamps
LEFT JOIN my_db.my_timezones as tzs
ON my_db.my_timestamps.my_key = tzs.my_key
LIMIT 1
┌─────────────────────────ts─┬─timezone───────────┬─────────────────────ts_ny1─┬─ts_ny1_type───────────────────────┬─────────────────────ts_ny2─┬─ts_ny2_type──────────┬─────────────────────ts_ny3─┬─ts_ny3_type──────────┐
│ 2020-04-01 00:00:00.000000 │ 'America/New_York' │ 2020-03-31 20:00:00.000000 │ DateTime64(6, 'America/New_York') │ 2020-04-01 00:00:00.000000 │ DateTime64(6, 'UTC') │ 2020-04-01 00:00:00.000000 │ DateTime64(6, 'UTC') │
└────────────────────────────┴────────────────────┴────────────────────────────┴───────────────────────────────────┴────────────────────────────┴──────────────────────┴────────────────────────────┴──────────────────────┘
这tzs.timezone
是一个字符串并包含撇号(我明确输入它们\'
):
┌─timezone───────────┬─toTypeName(timezone)───┐
│ 'America/New_York' │ LowCardinality(String) │
└────────────────────┴────────────────────────┘
但我也尝试过不使用它们以达到同样的效果。
是否可以按所示动态转换时区?
谢谢
编辑:也许注意到我收到一条带有修改后的查询版本的错误消息可能会有所帮助:
SELECT
ts,
tzs.timezone,
toStartOfInterval(ts, INTERVAL 1 month),
toStartOfInterval(ts, INTERVAL 1 month, tzs.timezone)
FROM my_db.my_timestamps
LEFT JOIN my_db.my_timezones as tzs
ON my_db.my_timestamps.my_key = tzs.my_key
LIMIT 1
Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Argument at index 2 for function toStartOfInterval must be constant: while executing 'FUNCTION toStartOfInterval(ts : 0, toIntervalMonth(1) :: 2, timezone : 1) -> toStartOfInterval(ts, toIntervalMonth(1), timezone) Date : 4'.
我真的不明白这意味着什么,除了它不是预期的:)
解决方案
推荐阅读
- javascript - 使用 JSPDF 将画布图表导出为 PDF
- java - 有没有一种方法可以在 tomcat 服务器启动之前检查 Spring Boot Project 中的 application.properties 文件中是否存在数据?
- amazon-web-services - 使用 updateItem 向 DynamDB 表添加新属性
- linux - Shell - 在 Centos 7 中启动 10,000 个进程,每个进程记录到不同的文件
- asp.net-core - 在 NET.Core 中构建多/单条件搜索功能(IQueryable 或 IEnumerable)
- reactjs - 为 React (web) 和 React Native (Mobile) 创建单个 npm 包
- racket - 如何将数字转换为字符串
- java - 从空类继承可以吗?
- php - 接口隔离原则:如何用很多可选方法拆分大接口
- java - 根据括号的数字 * 内容扩展给定字符串