我使用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会自动传递这些行吗?
答案 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')