时间戳中的格式字符串无效

时间:2018-02-15 10:13:35

标签: teradata

我正在尝试将值转换为timestamp(0)并插入表中。列Port_Out_END_Dttm是时间戳(0)。它给了我无效的格式字符串。

,MAX(coalesce(SRC.Port_Out_END_Dttm,cast('31/12/9999 00:00:00' as timestamp FORMAT 'dd/mm/yyyyBhh:mi:ss(0)') ))as Port_Out_END_Dttm 

整个查询如下:

sel
,case when  Port_Out_Ver_Phase_END_Dttm in cast ('12/31/9999' as date format 'MM/DD/YYYY') then null else Port_Out_Ver_Phase_END_Dttm end as Port_Out_Ver_Phase_END_Dttm

from
(
sel
,MAX(coalesce(SRC.Port_Out_END_Dttm,cast('31/12/9999 00:00:00' as timestamp FORMAT 'dd/mm/yyyyBhh:mi:ss(0)') ))as Port_Out_END_Dttm 
from table
)

首先,我需要将空值合并到高端日期,然后再将该日期视为空 这里有什么问题?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

没有必要将硬编码字符串CAST到日期/时间/时间戳,更好地使用标准SQL 日期/时间/时间戳文字

TIMESTAMP '9999-12-31 00:00:00'
DATE '9999-12-31'
TIME '00:00:00'

MAX(COALESCE(SRC.Port_Out_END_Dttm, TIMESTAMP '9999-12-31 00:00:00'))

顺便说一句,您可能需要为文字添加时区,否则可能会基于您的会话时区:

TIMESTAMP '9999-12-31 00:00:00+00:00'

答案 1 :(得分:1)

你的语法对我来说有些偏差。试试这个版本:

MAX(COALESCE(SRC.Port_Out_END_Dttm,
    CAST('31/12/9999 00:00:00' AS timestamp(0) FORMAT 'DD/MM/YYYYbhh:mi:ss')))