SQL Server CASE子句中的比较

时间:2011-12-19 18:31:40

标签: sql-server tsql 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条款中进行这样的比较?

3 个答案:

答案 0 :(得分:6)

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

当你按照它的方式编写它时,可以将它想象成switch语句,在那里你进行隐式的相等比较。如果您需要更复杂的逻辑,则需要以这种方式编写CASE

答案 1 :(得分:5)

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

您需要做的是将布尔表达式放在WHEN ...子句中。

答案 2 :(得分: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