2011-12-19 78 views
3

我將如何處理以下查詢?SQL Server CASE子句中的比較

SELECT 
CASE LEN(field1) 
WHEN > 15 --Error: Incorrect syntax near '>'. 
THEN SUBSTRING(field1, 1, 15) 
ELSE field1 
END 
AS 'My Field' 
FROM MyTbl 

你不能在CASE子句中這樣比較嗎?

+0

Left(field1,15)有什麼問題? – JeffO 2011-12-19 18:52:16

+0

什麼也沒有,但它更像是一個普遍的例子。 – 2011-12-19 19:14:03

回答

6
SELECT 
CASE 
WHEN LEN(field1) > 15 
THEN SUBSTRING(field1, 1, 15) 
ELSE field1 
END 
AS 'My Field' 
FROM MyTbl 

當你寫你有它的方式,認爲它像一個switch聲明,你讓隱含相等比較哪裏。如果你需要更復雜的邏輯,你需要這樣編寫CASE

+0

如果您在LEN(field1)> – 2011-12-19 18:37:16

+0

之後包含15,那麼本應該是一個完美的解決方案。downvote更多的是它也沒有解釋性文本來說明舊代碼無法工作的原因。現在你補充說,完全改變了我的投票。 :) – 2011-12-19 18:41:34

+0

啊,好的。謝謝 – 2011-12-19 18:43:03

5
SELECT 
    CASE 
     WHEN LEN(field1) > 15 
      THEN SUBSTRING(field1, 1, 15) 
     ELSE field1 
    END 
    AS 'My Field' 
FROM MyTbl 

你需要做的是把你的布爾表達式放在WHEN ...子句中。

2

你應該把它重新寫這樣的:

SELECT CASE WHEN LEN(field1) > 15 THEN SUBSTRING(field1, 1, 15) 
     ELSE field1 END AS [My Field] 
FROM MyTbl 

當你寫CASE SomeColumn WHEN預計的相等比較,讓你在其他情況下使用它。

SELECT CASE Column1 WHEN 1 THEN 'One' WHEN 2 THEN 'Two' ELSE 'Something else' END