【问题标题】:Convert VCHAR to TIMESTAMP or DATE in Teradata在 Teradata 中将 VARCHAR 转换为 TIMESTAMP 或 DATE
【发布时间】:2015-06-27 14:34:33
【问题描述】:

我使用 fastload 上传了一个表,并希望将 event_time 列转换为时间戳或只获取日期,因为我不需要时间组件。

文本格式为“MM/DD/YYYY HH:MM:SS AM/PM”,例如“05/24/2013 08:12:00 AM”

我试过了

CAST(event_time AS TIMESTAMP(0)) 

CAST(SUBSTRING (event_time,1,10) AS date) 

但它们对我不起作用。我得到的错误是无效的时间戳/日期。

作为一个额外的问题, 我认为数据中没有任何异常值(即每一行的格式都如上所述),但如果有,我该如何解释这些错误?还是 Teradata 会自动传递这些行?

【问题讨论】:

    标签: sql date timestamp teradata


    【解决方案1】:

    CAST 不起作用,因为这不是默认的时间戳/日期格式。

    最简单的方法是使用自 TD14 起支持的 TO_DATE 函数:

    TO_DATE(event_time, 'MM/DD/YYYY HH:MM:SS AM')
    

    在 TD14 之前是:

    CAST(CAST(event_time AS TIMESTAMP FORMAT 'MM/DD/YYYYbHH:MI:SSbT') AS DATE)
    

    关于异常值,它们将导致“无效日期/时间戳”错误。当您在 FastLoad 期间将它们转换为时间戳时,这些行将无法加载并将被插入到 ET 错误表中。但是您不能在 FL 中使用较新的 CAST 语法,必须是旧的 Teradata 样式转换:

    :event_time (TIMESTAMP, FORMAT 'MM/DD/YYYYbHH:MI:SSbT')
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2018-08-11
      • 2020-03-11
      • 2011-11-21
      • 2010-09-16
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      相关资源
      最近更新 更多