2016-10-04 4 views
0

두 테이블을 조인하려고하는데 사용중인 열이 테이블 # 1 = float 및 테이블 # 2 = varchar (8)의 두 가지 데이터 형식입니다. 이러한 예에서조인에 사용할 동일한 데이터 형식으로 열을 변환합니다.

table#1 examples: 
5585 
985 
445566 
null 

table#2 examples: 
005585 
000985 
445566 

은, 난 단지에 대한 데이터의 I/변환 캐스트 어떻게 445,566

을 행 얻을 ??? 열이 있도록 모든 행이 반환 데이터를

+0

난 정말 이유를 이해하지 않습니다 캐스팅/변환해야합니다. FLOAT는 VARCHAR보다 높은 우선 순위를 가지므로 VARCHAR은 조인시 자동으로 FLOAT로 변환되어야합니다. 내가 뭔가를 오해하지 않는다면. 편집 : SQL에서 빠른 테스트는 'varchar'로 5585를 float으로 결합하여 '005585'에 대한 간단한 조인과 관련된 문제가 없음을 보여줍니다. – ZLK

답변

1

사용

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

나는 분명히 했어야했다. 나는 방금 4 개의 예제를 제공했다. 테이블은 수천 개의 행을 가지고 있고, 하나의 행을 분리하는 대신 모든 행을 포착 할 해결책을 찾고 있었다. – Benjo

+0

이것은 당신이'CAST' 한 타입을 다른 타입으로 바꾸고, 필요한 곳에 사용하십시오.이 경우에는'JOIN' – Logar314159

0

일치하는 것으로이 정확한 기준을 가입 당신에 따라 달라집니다. 일반적으로, 쉽게 그 반대보다 VARCHAR하기 위해 숫자 형 변환에서 안전하다, 그래서 당신은 같은 것을 할 수있는 :

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 
관련 문제