Как проверить наличие подстроки в столбце, используя CASE / IF (SQL-запрос) - PullRequest
4 голосов
/ 04 августа 2010

Мне нужно вернуть одно из 2 значений для определенных условий: Мои разные случаи: если у одного столбца есть «подстрока» в правом конце, верните этот столбец. (т.е. как "% substring") В противном случае вернуть другой столбец (из другой таблицы)

Это работает:

SELECT * From Table1 where col1 is not null and col1 like '%substring'

Однако это не работает:

SELECT col5,
CASE Table1.Col1 
   WHEN NULL Then Table2.Col2
   WHEN '%substring' THEN Table1.Col1
   ELSE Table2.Col2
 FROM Table1
 JOIN Tablex ON Tablex.colID= Tabley.colID
 JOIN Table1 ON Table1.colID = Tablex.colID

и множество других объединений для взаимосвязанных таблиц с внешними ключами с table1 / table2 ... Результаты всегда возвращаются из части else.

Я тоже попробовал, это тоже не сработало:

SELECT col5,
CASE Table1.Col1 
   WHEN NULL Then Table2.Col2
   WHEN '' THEN Table2.Col2
   ELSE Table1.col1
 FROM Table1
 JOIN Tablex ON Tablex.colID= Tabley.colID
 JOIN Table1 ON Table1.colID = Tablex.colID

1 Ответ

6 голосов
/ 04 августа 2010

Необходимо использовать:

SELECT col5,
       CASE 
         WHEN Table1.Col1 IS NULL Then Table2.Col2
         WHEN Table1.Col1 LIKE '%substring' THEN Table1.Col1
         ELSE Table2.Col2
       END
FROM Table1
JOIN Tablex ON Tablex.colID= Tabley.colID
JOIN Table1 ON Table1.colID = Tablex.colID

Выражения CASE / WHEN эквивалентны "=", поэтому указание NULL никогда не будет оцениваться должным образом, потому что вам нужно использовать IS NULL.Точно так же не могу предположить, что используется LIKE ...

Вы также пропустили ключевое слово END, чтобы обозначить конец выражения CASE.

Имейте в виду, что Table2.Col2 и Table1.Col1 типы данных тоже одинаковые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...