2016-10-04 4 views
0

2つの表を結合しようとしていますが、使用される列は2つの異なるデータ型です(表1 =浮動小数点および表2 = varchar(8))。これらの例では結合で使用する同じデータ型に列を変換します。

table#1 examples: 
5585 
985 
445566 
null 

table#2 examples: 
005585 
000985 
445566 

、私は変換/キャストするにはどうすればよいだけで、行445566

のためのデータを取得します?列の戻りデータにこれはあなたの正確な結合条件に依存するであろう

+0

私は本当に理由を理解していない:一般的に、あなたが何かなどを行うことができますので、その逆よりもvarchar型に数値型から変換するために、簡単かつ安全ですキャスト/変換する必要があります。 FLOATはVARCHARよりも優先順位が高いため、VARCHARは自動的にFLOATに変換されます。私が何かを誤解していない限り。編集:SQLの簡単なテストでは、私は、'8585 'の単純な結合でvarcharが浮動小数点として5585に結合されているので問題はありません。 – ZLK

答えて

1

使用

CAST('445566' AS FLOAT) = 445566 
+0

私は明らかにすべきです...私はちょうど4つの例を提供しました - テーブルには数千の行の数値データがあり、1つの行を分離するのではなく、すべての行をキャプチャする解決策を探していました – Benjo

+0

これは '型を別の型に変換し、必要な場所で使用します。この場合は、 'JOIN' – Logar314159

0

に一致するすべての行ようにします。

SELECT stuff FROM table1 
INNER JOIN table2 ON Convert(varchar(8),table1.field) = table2.field 
1
Declare @Table1 table (SomeField1 float) 
Insert Into @Table1 values (5585),(985),(445566),(null) 

Declare @Table2 table (SomeField2 varchar(8)) 
Insert Into @Table2 values ('005585'),('000985'),('445566') 


Select A.SomeField1 
     ,B.SomeField2 
From @Table1 A 
Join @Table2 B 
    on cast(A.SomeField1 as int) = cast(B.SomeField2 as int) 

戻り

SomeField1 SomeField2 
5585  005585 
985   000985 
445566  445566 
関連する問題