2010-08-03 55 views
4

我需要爲特定條件返回2個值之一: 我的不同情況是: 當一列在右側具有'substring'時結束,返回該列。 (即LIKE '%子') 否則返回另一列(其它表)如何使用CASE/IF(SQL查詢)檢查列中的子字符串

這工作:

SELECT * From Table1 where col1 is not null and col1 like '%substring' 

然而,這不起作用:

SELECT col5, 
CASE Table1.Col1 
    WHEN NULL Then Table2.Col2 
    WHEN '%substring' THEN Table1.Col1 
    ELSE Table2.Col2 
FROM Table1 
JOIN Tablex ON Tablex.colID= Tabley.colID 
JOIN Table1 ON Table1.colID = Tablex.colID 

和一堆與外鍵相關的表與table1/table2的更多聯接...... 結果總是從「其他」部分返回。

我也試過這個,這個沒有工作之一:

SELECT col5, 
CASE Table1.Col1 
    WHEN NULL Then Table2.Col2 
    WHEN '' THEN Table2.Col2 
    ELSE Table1.col1 
FROM Table1 
JOIN Tablex ON Tablex.colID= Tabley.colID 
JOIN Table1 ON Table1.colID = Tablex.colID 

回答

6

需要使用:

SELECT col5, 
     CASE 
     WHEN Table1.Col1 IS NULL Then Table2.Col2 
     WHEN Table1.Col1 LIKE '%substring' THEN Table1.Col1 
     ELSE Table2.Col2 
     END 
FROM Table1 
JOIN Tablex ON Tablex.colID= Tabley.colID 
JOIN Table1 ON Table1.colID = Tablex.colID 

CASE/WHEN表達式等同於 「=」,因此指定NULL永遠正確評估,因爲您需要使用IS NULL。同樣,不能假定正在使用LIKE ...

您還遺漏了END關鍵字來標示CASE表達式的結束。

請注意,Table2.Col2Table1.Col1數據類型也是一樣的。

相關問題