2017-06-12 82 views
0

我在源中定义为varchar(255)的日期列。我想将其转换为时间戳(0)。我正在使用以下查询:teradata中提供的日期无效 - varchar日期到时间戳记(0)

SEL CAST(CAST(SERIND AS CHAR(10)) || ' 00:00:00' AS TIMESTAMP(0)) 
FROM DP_BOX.SOC1 
WHERE SERIND ='20130518' 

我在这里得到无效的时间戳。样品SERIND是

20170509 
00000000 

任何人都可以请帮助我吗?

回答

0

你可以尝试用CAST

SEL CAST(SERIND as TIMESTAMP(0) FORMAT 'YYYYMMDDHHMISS') 
FROM DP_BOX.SOC1; 
+0

不,它给予无效的时间戳。 :( – user3901666

0

你将不得不CAST()自己的方式为日期格式,在Teradata的时间戳的组件可接受的格式是否正确。 (我认为可能有一个数学快捷方式来获得数字格式,但我不得不面对那个。)

假设SERIND是CHAR(8)开头。第一个CAST()可让您以兼容的格式获得值DATE。第二CAST()让你一个DATE用10字符的格式,以便当它串连于时间戳DATE值的所得到的字符转换为正确的10字符格式的TIME部是明确地CAST()TIMESTAMP值:

SELECT CAST(CAST(CAST(SERIND AS DATE FORMAT 'YYYYMMDD') 
       AS DATE FORMAT 'YYYY-MM-DD') || ' 00:00:00' AS TIMESTAMP(0)) 
    FROM DP_BOX.SOC1 
WHERE SERIND > '00000000'; -- Invalid Date value 
+2

你可以在一个步骤中做到这一点:'选择强制转换(serind作为时间戳(0)格式'YYYYMMDD')' – Andrew

+0

@Rob尝试了这种方法,但仍然给无效日期:( – user3901666

+0

@andrew不工作,因为我有00000000以及我的日期字段 – user3901666