2009-12-10 5 views
3

값을 여러 열과 비교해야하며 하나의 결과 만 반환해야하는 쿼리가 있습니다. 문자열 인수를 정수로 변환하려고 시도 할 때 변환 오류가 계속 발생하지만 이것을 우회하는 좋은 방법을 찾을 수 없었습니다.SQL 검색 다중 필드, 하나만 반환

SELECT DISTINCT 
    CASE 
    WHEN table_one.integer_col = CAST('argument%' AS int) 
     THEN table_one.integer_col 
    WHEN table_one.varchar_col LIKE 'argument%' 
     THEN table_one.varchar_col 
    WHEN table_two.varchar_col LIKE 'argument%' 
    END 
    FROM table_one 
    INNER JOIN table_two 
    ON table_one.pk=table_two.fk 
    WHERE 
    table_one.integer_col = CAST('argument%' AS int) 
    table_one.varchar_col LIKE 'argument%' OR 
    table_two.varchar_col LIKE 'argument%' 

'인수 %가'성공적으로 정수로 변환 할 수있는 경우는 작동하지만 때 할 수없는 쿼리 폭탄.

+0

왜 정수에 대해 LIKE 쿼리를 수행 하시겠습니까? – RichardOD

+0

죄송합니다. 너무 빨리 입력하는 중 ... 질문을 수정했습니다. –

답변

3

정수를 varchar 데이터 유형으로 변환하거나 변환하는 방법은 어떻습니까? int 열과 일치하도록 int로 varchar 검색 인수를 변환하는 대신 int 열을 varchar로 변환하십시오.

다음은 간단한 예입니다.

DECLARE @Table TABLE 
(
someInt  int 
) 

INSERT INTO @Table (SomeInt) 
    SELECT 1234567 UNION ALL 
    SELECT 98765 UNION ALL 
    SELECT 24680 UNION ALL 
    SELECT 13579 UNION ALL 
    SELECT 963852 UNION ALL 
    SELECT 147258 




SELECT * 
    FROM @Table 
    WHERE CAST(SomeInt AS varchar(10)) LIKE '1%' 

---- Results 
1234567 
13579 
147258 
+0

나는 어떻게 생각하지 않았는지 ... 고마워! –

2
SELECT DISTINCT 
    CASE 
    WHEN CAST(table_one.integer_col AS VARCHAR(MAX)) LIKE 'argument%' 
     THEN table_one.integer_col 
    WHEN table_one.varchar_col LIKE 'argument%' 
     THEN table_one.varchar_col 
    WHEN table_two.varchar_col LIKE 'argument%' 
    END 
    FROM table_one 
    INNER JOIN table_two 
    ON table_one.pk=table_two.fk 
    WHERE 
    CAST(table_one.integer_col AS VARCHAR(MAX)) LIKE 'argument%' OR 
    table_one.varchar_col LIKE 'argument%' OR 
    table_two.varchar_col LIKE 'argument%'