【问题标题】:Teradata BTEQ - Invalid timestamp issueTeradata BTEQ - 无效的时间戳问题
【发布时间】:2023-03-22 05:10:01
【问题描述】:

我正在尝试通过 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.

【问题讨论】:

    标签: teradata


    【解决方案1】:

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

    这部分'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'
    

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

    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))
    

    【讨论】:

    • S_ORDER_ITEM.LAST_UPD 是 TIMESTAMP(0) 数据类型,我的输入日期格式为 YYYYMMDD(无连字符)。你能修改答案吗
    • 我已将日期格式从 YYYYMMDD 格式转换为 YYYY-MM-DD 格式,然后应用了您的解决方案。它奏效了。
    【解决方案2】:

    当您的手机时间错误时发生timestemp错误 解决方案是更正您的设备时间

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 1970-01-01
      • 2020-06-18
      • 2020-01-25
      • 2018-05-24
      • 2022-07-20
      • 2017-01-21
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多