我正在尝试将时间戳转换为以下示例格式,' yyyy-mm-dd hh:mm:ss.fff',以小时和分钟为单位。稍后我将使用此字段作为分组维度,因此删除秒和毫秒非常重要。我希望结果值仍然被解释为不需要的真实时间,所以如果我得到一个字符串我会没事的。最后也是最重要的时间戳是UTC时间,我需要将它转换为美国东部。
非常感谢对此提供任何帮助。谢谢
答案 0 :(得分:1)
在我看来,Teradata中的时间戳格式化是一种痛苦,其中一些内容的记录很少。
对于Teradata中的时区转换,请使用<TSCOLUMN> at <difference from UTC>
。因此对EST:
<TS COLUMN> at -5
。 (至少我认为EST是UTC -5。)
对于您想要的格式,您必须将其保留为char列。 Teradata不会让你有一个没有秒的时间戳列。因此,根据您上面的示例格式:
cast (<TS COLUMN> at -5 as char(16))
编辑:
正如所指出的,使用小时差异进行tz转换并不是一个好主意。您可以使用此Teradata link中列出的AT <TZ NAME>
。所以,对于东方,你会使用:
<TS COLUMN> AT 'America Eastern'
。
由于它目前是DST,因此目前会返回4小时的差异。
答案 1 :(得分:0)
只需减去秒数:
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))
或TD14中的Oracle 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,但无论如何都需要时区信息。时区