【问题标题】:Convert incoming timezone {IST/PST/GMT etc..} TS to CST timezone TS in teradata?将传入的时区 {IST/PST/GMT 等..} TS 转换为 teradata 中的 CST 时区 TS?
【发布时间】:2020-01-15 23:02:43
【问题描述】:

我有一个要求,我必须将时间戳 {with any timezone} 列转换为 CST 时区时间戳。

传入的时区会在另外一栏提到,请看下表:

我要计算'????'?

附:我的 teradata 默认时区设置是 CST。

我已经试过了:

选择时间戳 AT 'America Central'

但它给了我相同的输出,因为我的默认 teradata 时区是 CST。

我希望能够将时区作为带有时间戳的输入提供给 teradata,并在 CST 中获取输出时间戳。

【问题讨论】:

  • 如果您存储没有时区的数据,Teradata 会将其存储为 GMT,并自动将其转换为您的时区,即 CST。这不是你想要的吗?
  • 其实不然,传入的数据可以在任何时区,我们需要 CST 中的输出时间戳。此外,timezone_text 列会告诉我们时间戳列 {our input} 的时区是什么。
  • 换一种说法,真的没有没有时区的时间戳。时区可以表示为与 GMT 偏移的显式小时/分钟,也可以是隐式的(内部 GMT 或外部会话时区)。 AT 子句只允许您获取相对于不同时区的外部形式。

标签: timestamp timezone teradata timestamp-with-timezone


【解决方案1】:

理想情况下,作为加载过程的一部分,您可以将时间戳 + 字符串转换为 TIMESTAMP WITH TIME ZONE 类型(带有 数字 小时和分钟偏移量)。 (如果需要,另外单独存储字符串。)对于输入 TIMESTAMP(无时区),Teradata 假定输入在会话时区(加载会话的)中,并在内部转换为 GMT。默认情况下,Teradata 会在输出时从内部格式隐式转换为会话时区。

Teradata 不提供基于单独存储的时区字符串从一个时区转换为另一个时区的功能。您可能会查看类似 Java time 的东西,用于将单独的时间戳和字符串组合成 ZonedDateTime。这可能会被合并到 UDF 中以在 Teradata 中运行。或者在客户端上,您可以在加载之前使用 Python pytz 之类的东西。

【讨论】:

  • 实际上,如果您使用 Teradata considers valid 存储时区字符串,您可以在 AT 子句中使用该列 - select <timestamp column> AT <timezone column>。不知道这会比简单地存储带有时区的时间戳更好......
  • 不一定看到存储原始字符串的变体有什么好处。但是 TIMESTAMP WITH TIME ZONE 使用数字小时/分钟偏移量,即使对于“AT SOURCE”也是如此。如果您想首先显示用于导出该偏移量的字符串值,那么您可能必须存储它(因为给定的偏移量可能映射到多个时区)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2019-05-21
  • 2014-05-11
  • 2014-06-07
  • 2012-12-25
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多