2016-11-30 1 views
0

내부 필드에 작은 필드를 varchar 필드에 조인하려고합니다. 정수 값만 필요하지만 오류가 발생합니다. varchar 필드에는 정수와 문자열이 있습니다. DESC 만 ID 필드가 필요하지 않습니다.내부 조인에서 변환하지 못했습니다.

SELECT 
    CASE_NUM, LAST_NAME, FIRST_NAME, MI, '' AS NA, 
    DOB, SEX, [ADDRESS], '' AS NA, CITY, STATE, ZIP 
    --,CONVERT(SMALLINT, CONVERT(VARCHAR(55), CDTBL1.[DESC])) 
    --,CASE WHEN CDTBL1.ID BETWEEN 1 AND 99999 THEN CDTBL1.[DESC] 
    --END AS COUNTY 
FROM 
    CDCLIENT 
INNER JOIN 
    CDTBL1 ON CDCLIENT.ADDR_COUNTY_ID = CDTBL1.ID 
+0

당신이 할 수있는''조인의 양쪽에 varchar''으로 캐스팅? – abhi

답변

1

변경

'ON CDCLIENT.ADDR_COUNTY_ID = ' 

'ON CAST(CDCLIENT.ADDR_COUNTY_ID as varchar) = ' 

당신은 당신이 그들이되어 있는지 확인하려면에 합류 컬럼의 데이터 유형을 확인해야합니다 같은 유형. 일반적으로 ID 열은 int 유형이 될 것이라고 생각하지만 위에 제공된 테이블에는 ID 열에도 varchar 값이 들어 있습니다.

SQL의 데이터 유형에 우선 순위가 있으며 smallint는 varchar보다 위에 있습니다. 오류의 원인이되는 암시 적 변환이 발생합니다. 여기

더 많은 정보는 : https://msdn.microsoft.com/en-us/library/ms190309.aspx

0
: 여기
================================== 
|ID  |DESC     | 
|==========|=====================| 
|ACAMPROCAL|acamprosate calcium | 
|----------|---------------------| 
|BUPROPION |bupropion   | 
|----------|---------------------| 
|1   |Other    | 
|----------|---------------------| 
|4   |Expired    | 
|----------|---------------------| 
|3   |Dschg    | 
|----------|---------------------| 
|AWOL  |Absence without Leave| 
================================== 

내가 노력뿐만 아니라 주석 한 쿼리입니다 :

Conversion failed when converting the varchar value 'AWOL' to data type smallint.

이 테이블 모양을 수 있습니다 :

는 오류가 발생합니다

음수가 아닌 정수를 원하면 다음과 같이 논리를 사용하십시오.

select (case when CDTBL1.[DESC] not like '%[^0-9]%' 
      then convert(smallint, CDTBL1.[DESC]) 
     end) 

필드의 길이와 값을 확인하여 오류가 발생하지 않도록 할 수도 있습니다.

SQL 서버 2012+에서는 try_convert()를 사용하여이 작업을 단순화 할 수 있습니다 : 오류가 발생한다면

select try_convert(smallint, CDTBL1.[DESC]) 

NULL를 반환합니다. 그러나, 그것은 SQL 서버에서 사용할 수 없습니다 2008 년

1

이 암시 적 변환의 문제이며, SQL Server를 변환하는 잘못된 데이터를 선택했다. 일반적으로 서로 다른 데이터 유형을 비교해야 할 경우 명시 적으로 다른 유형으로 변환하는 것이 가장 좋습니다.

마이크로 소프트는 what data types are allowed to implicitly and explicitly convert between에 멋진 테이블을 가지고 있습니다.

enter image description here

관련 문제