2017-12-21 18 views
0

私はTeradataSQLに非常に新しいです。私は3つのテーブルのデータを組み合わせてテーブルを作成する必要があります。私はうまくそれらの2つに参加することができました。私は3番目のテーブルの結合条件を正しく書くことができません。ここでは、コードは次のとおりです。Teradata - Varcharと小数点を比較する

select s.cola, s.colb, 
t.colc, t.cold, 
u.cole, u.colf, u.colg, u.colh, u.coli, u.colj, u.colk, u.coll 
from table1 s 
inner join table2 t 
on s.colb = t.colc 
inner join table3 u 
on t.cold = cast(u.colm as decimal) 
order by 3 
where substr(cast(s.cola as varchar(10)),6,2) = 11 and substr(cast(s.cola as varchar(10)),1,4) = 2017 and substr(cast(s.cola as varchar(10)),9,2) between 06 and 10 

私は取得していますエラーは次のとおりです。

[Teradata Database] [2620] The format or data contains a bad character.

私は問題がラインであると思う:on t.cold = cast(u.colm as decimal)u.colmはタイプVARCHAR(50)であり、t.coldはタイプDECIMAL(10, 0)です。私はそれを適切にキャストしたと信じています。助けてください。あらかじめありがとうございます。

答えて

2

u.colmにいくつかの不良データがあります。

あなたのTeradataリリースによって、あなたはまた、例えば、結合条件のものを使用することができます

WHERE u.colm > '' AND TRYCAST(u.colm as decimal(10,0)) ISNULL 

または

WHERE u.colm > '' AND TO_NUMBER(u.colm) IS NULL 

を使用して、それを確認することができます

on t.cold = trycast(u.colm as decimal(10,0)) 

デフォルト値(5,0)のように、小数の精度を追加することを忘れないでください。

WHERE_conditionが異常ですが、s.colaのデータ型は何ですか? 日付がyyyy-mm-ddの文字列です。最後にORDER BYWHERE後に配置する必要があります

WHERE trycast(s.cola as date) between date '2017-11-06' and date '2017-11-10' 

を試してみてください。

+0

ありがとうございました。 'u.colm'にはアルファベットと数字の両方を含む値がいくつかあります。 't.cold'を' varchar(50) 'としてキャストして修正しました。 's.cola 'は日付ですが、上記の行は機能しませんでした。 'order by 'の修正をありがとうございます。 –

+0

'trycast'の代わりに' cast'を試したときに 'where'条件の日付の問題が解決されました。 –

関連する問題