2017-06-12 80 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