Сравнение в предложении SQL Server CASE - PullRequest
3 голосов
/ 19 декабря 2011

Как мне поступить со следующим запросом?

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 ]

6 голосов
/ 19 декабря 2011
SELECT
CASE 
WHEN LEN(field1) > 15
THEN SUBSTRING(field1, 1, 15)
ELSE field1
END
AS 'My Field'
FROM MyTbl

Когда вы пишете так, как у вас, подумайте об этом как о switch, где вы проводите неявное сравнение на равенство. Если вам нужна более сложная логика, вам нужно написать CASE таким образом.

5 голосов
/ 19 декабря 2011
SELECT 
    CASE
        WHEN LEN(field1) > 15
            THEN SUBSTRING(field1, 1, 15) 
        ELSE field1 
    END 
    AS 'My Field' 
FROM MyTbl 

То, что вам нужно сделать, это поместить логическое выражение в предложение WHEN ....

2 голосов
/ 19 декабря 2011

Вы должны переписать это так:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...