2009-12-10 86 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 2009-12-10 16:16:35

+0

對不起,打字太快...編輯了問題。 – 2009-12-10 16:21:35

回答

3

將整數轉換或轉換爲varchar數據類型如何? 而不是將您的varchar搜索參數轉換爲int以匹配int列,請將您的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

我不知道我怎麼沒有想到...謝謝! – 2009-12-12 12:50:34

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%'