Teradata BTEQ - 无效的时间戳问题

Teradata BTEQ - Invalid timestamp issue

我正在尝试通过 TERADATA BTEQ 执行 sql 并收到以下错误。

但同样的 sql 在 Teradata SQL 助手中执行时 运行 很好。

WHERE S_ORDER_ITEM.LAST_UPD  BETWEEN CAST( (('20050614' (DATE, FORMAT 'YYYY-MM-DD')) -1 (CHAR(10)) )|| ' ' || '22:00:01' AS TIMESTAMP(0))  AND CAST( (('20050614' (DATE, FORMAT 'YYYY-MM-DD')) (CHAR(10)) )|| ' ' || '22:00:00' AS TIMESTAMP(0) )
 *** Failure 2666 Invalid date supplied for S_ORDER_ITEM.LAST_UPD.

错误消息表明 S_ORDER_ITEM.LAST_UPD 不是 date/timestamp(字符?)并且由于数据错误导致自动类型转换为时间戳失败。

这部分 '20050614' (DATE, FORMAT 'YYYY-MM-DD') 永远不会工作,因为字符串与格式不匹配。

不需要将字符串转换为日期,因为使用标准 SQL DATE '2005-06-14'.

来编写日期文字的推荐方法更简单、更短

如果确实知道日期你最好写

BETWEEN TIMESTAMP '2005-06-13 22:00:01'
    AND TIMESTAMP '2005-06-14 22:00:00'

否则不要转换 to/from 字符串,而是使用日期时间计算:

BETWEEN Cast(DATE '2005-06-14' AS TIMESTAMP(0)) - INTERVAL '01:59:59' HOUR TO SECOND
    AND Cast(DATE '2005-06-14' AS TIMESTAMP(0)) + INTERVAL '22:00:00' HOUR TO SECOND

编辑:

如果您无法更改输入格式,则需要应用另一种格式:

BETWEEN Cast((('20050614' (DATE, Format 'YYYYMMDD')) -1 (Format 'yyyy-mm-dd')) || ' ' || '22:00:01' AS TIMESTAMP(0))
    AND Cast((('20050614' (DATE, Format 'YYYYMMDD'))    (Format 'yyyy-mm-dd')) || ' ' || '22:00:00' AS TIMESTAMP(0))

当您的 phone 时间错误时会出现 timestemp 错误 解决方案是更正您的设备时间