我正试图将格式如以下示例"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,但您仍然需要时区信息。时区