teradata中提供的日期无效 - varchar date to timestamp(0)

时间:2017-06-12 08:36:31

标签: teradata

我在source中有一个日期列,定义为varchar(255)。我想将其转换为时间戳(0)。我使用以下查询:

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

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

20170509
00000000

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以使用CAST

的正确格式试用TIMESTAMP(0)
SEL CAST(SERIND as TIMESTAMP(0) FORMAT 'YYYYMMDDHHMISS')
FROM DP_BOX.SOC1;

答案 1 :(得分:0)

您将需要CAST()以您的方式使用可接受的日期格式作为Teradata中时间戳的组件。 (我认为可能有一个数学的快捷方式也可以使用数字格式,但我必须面对那个。)

假设SERIND是CHAR(8)开头。第一个CAST()会使您获得具有兼容格式的DATE值。第二个CAST()会为您提供一个包含10个字符格式的DATE,这样当您将其连接到时间戳的TIME部分时,DATE值的结果字符转换就是正确的10个字符格式要明确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