SQL 2005 Можно ли использовать ключевое слово, как в случае оператора - PullRequest
13 голосов
/ 07 октября 2011

Мне нужен оператор case, который допускает частичное совпадение.Я получаю синтаксическую ошибку, но мне интересно, возможно ли что-то похожее на это.Если нет, мое вторичное решение - переписать как курсор ... Пример:

SELECT CASE ColumnName
           WHEN 'value1' THEN 'answer1'
           WHEN 'value2' THEN 'answer2'
           WHEN LIKE '%TEST%' THEN 'answer3'
       END AS Answer
FROM TableName

Ответы [ 5 ]

30 голосов
/ 07 октября 2011

попробуйте

SELECT CASE 
           WHEN ColumnName = 'value1' THEN 'answer1'
           WHEN ColumnName = 'value2' THEN 'answer2'
           WHEN ColumnName LIKE '%TEST%' THEN 'answer3'
       END AS Answer
FROM TableName

пример, который вы можете запустить

SELECT name,CASE 
           WHEN Name = 'sysobjects' THEN 'answer1'
           WHEN Name = 'syscols' THEN 'answer2'
           WHEN Name LIKE '%p%' THEN 'answer3'
           ELSE 'unknown'
       END AS Answer
FROM sysobjects
7 голосов
/ 07 октября 2011

Нужно использовать немного другой синтаксис CASE:

SELECT CASE WHEN ColumnName LIKE 'value1' THEN 'answer1'
            WHEN ColumnName LIKE 'value2' THEN 'answer2'
            WHEN ColumnName LIKE '%TEST%' THEN 'answer3'
ELSE 'not like any of them' END [Answer]
FROM TableName
3 голосов
/ 07 октября 2011

В качестве альтернативы вы можете вкладывать условия CASE и значения CASE WHEN, например:

SELECT CASE ColumnName
           WHEN 'value1' THEN 'answer1'
           WHEN 'value2' THEN 'answer2'
           ELSE CASE WHEN ColumnName LIKE '%TEST%' THEN 'answer3' END
       END AS Answer
FROM TableName
2 голосов
/ 07 октября 2011

Вы используете «простое CASE выражение», но вы должны использовать «искомое CASE выражение». См. документацию для некоторых примеров.

0 голосов
/ 26 марта 2015

В sql ORACLE 10

SELECT 
    CASE WHEN instr(ColumnName, 'value1')>0 THEN 'answer1'
       WHEN instr(ColumnName,'value2')>0 THEN 'answer2'
       WHEN instr(ColumnName,'TEST')>0 THEN 'answer3'
       ELSE 'not like any of them' 
    END
FROM TableName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...