2017-06-12 7 views
0

varchar(255)として定義されている日付の列がソースにあります。私はタイムスタンプ(0)に変換したい。私は以下のクエリを使用しています:無効な日付がタイムスタンプに供給されました - 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

あなたがTeradataの中、タイムスタンプの構成要素として許容される日付フォーマットにあなたの方法をCAST()する必要があるとしている

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

いいえ、それは無効なタイムスタンプを与えます。 : – user3901666

0

の正しい形式でCASTを試すことができます。 (数字の書式にするには数学のショートカットがあるかもしれないと思うが、私はそれに麺をつける必要がある)

SERINDはCHAR(8)で始まると仮定します。最初のCAST()は、互換フォーマットのDATE値になります。

:あなたは、タイムスタンプの TIME部分にそれを連結するとき DATE値の結果の文字変換が明示的 CAST() TIMESTAMP値になるように正確10文字形式であるように、第2 CAST()はあなた DATE 10と文字形式を取得します
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

これは、1つのステップで行うことができます: 'キャストを選択する(タイムスタンプ(0)フォーマット 'YYYYMMDD')'。 – Andrew

+0

@Robそのアプローチを試みましたが無効な日付を与えています:( – user3901666

+0

@andrew 00000000 – user3901666

関連する問題