在Teradata中将VARCHAR转换为TIMESTAMP或DATE

时间:2015-04-20 18:02:47

标签: sql date timestamp teradata

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

文字格式为&#39; MM / DD / YYYY HH:MM:SS AM / PM&#39;,例如,&#39; 05/24/2013 08:12:00 AM&#39; < / p>

我试过了

CAST(event_time AS TIMESTAMP(0)) 

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

但他们不适合我。我得到的错误是无效的时间戳/日期。

作为奖金问题, 我不认为数据中有任何异常值(即每行的格式如上所述),但如果有,我如何解释这些错误?或Teradata会自动传递这些行吗?

1 个答案:

答案 0 :(得分:2)

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)

关于异常值,它们将导致&#34;无效的日期/时间戳&#34;错误。在FastLoad期间将它们转换为时间戳时,这些行将无法加载并将插入到ET错误表中。但是你不能在FL中使用更新的CAST语法,必须是旧的Teradata风格的演员:

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