从teradata中的时间戳中提取时间,同时丢弃秒和毫秒



我正试图将格式如以下示例"yyyy-mm-dd hh:mm:ss.fff"的时间戳转换为以小时和分钟为单位的时间。稍后我将使用此字段作为分组维度,因此删除秒和毫秒非常重要。我更希望结果值仍然被解释为真实时间,这是不需要的,所以如果我得到一个字符串,我会没事的。最后也是最重要的时间戳是UTC时间,我需要将其转换为美国东部时间。

如有任何协助,我们将不胜感激。感谢

在我看来,Teradata中的时间戳格式化有点麻烦,而且其中一些内容的文档记录很差。

对于Teradata中的时区转换,请使用<TSCOLUMN> at <difference from UTC>。因此,对于EST:CCD_ 2。(至少我认为EST是UTC-5。)

对于您想要的格式,您必须将其保留为char列。Teradata不会让你有一个没有秒的时间戳列。因此,基于上面的示例格式:

cast (<TS COLUMN> at -5 as char(16))

编辑:如前所述,使用时差进行tz转换不是一个好主意。您可以使用此Teradata链接中列出的AT <TZ NAME>。因此,对于eastern,您将使用:

<TS COLUMN> AT 'America Eastern'

由于目前是夏令时,因此目前将返回4小时的时差。

只需减去秒数:

ts - (extract(second from ts) * interval '1.000' second)

然后减去5小时以调整EST:

ts - (extract(second from ts) * interval '1.000' second)
   - interval '5' hour

要将时间戳转换为字符串,您需要应用FORMAT:

cast(cast(ts as format 'yyyy-mm-ddBhh:mi') as char(16))

或Oracle在TD14:中的TO_CHAR

to_char(ts, 'yyyy-mm-dd hh24:mi')

编辑:当你需要申请夏令时时,你应该使用

(ts - (extract(second from ts) * interval '1.000' second))
   AT 'America Eastern'

当然,这会将数据类型更改为TIMESTAMP WITH TIME ZONE,但您仍然需要时区信息。时区

相关内容

  • 没有找到相关文章

最新更新