我將如何處理以下查詢?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子句中這樣比較嗎?
我將如何處理以下查詢?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子句中這樣比較嗎?
SELECT
CASE
WHEN LEN(field1) > 15
THEN SUBSTRING(field1, 1, 15)
ELSE field1
END
AS 'My Field'
FROM MyTbl
當你寫你有它的方式,認爲它像一個switch
聲明,你讓隱含相等比較哪裏。如果你需要更復雜的邏輯,你需要這樣編寫CASE
。
如果您在LEN(field1)> – 2011-12-19 18:37:16
之後包含15,那麼本應該是一個完美的解決方案。downvote更多的是它也沒有解釋性文本來說明舊代碼無法工作的原因。現在你補充說,完全改變了我的投票。 :) – 2011-12-19 18:41:34
啊,好的。謝謝 – 2011-12-19 18:43:03
SELECT
CASE
WHEN LEN(field1) > 15
THEN SUBSTRING(field1, 1, 15)
ELSE field1
END
AS 'My Field'
FROM MyTbl
你需要做的是把你的布爾表達式放在WHEN ...
子句中。
你應該把它重新寫這樣的:
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
Left(field1,15)有什麼問題? – JeffO 2011-12-19 18:52:16
什麼也沒有,但它更像是一個普遍的例子。 – 2011-12-19 19:14:03