Использование оператора LIKE и «больше чем» в выражении Case When - PullRequest
1 голос
/ 03 апреля 2020

Это для раздела в модульном тесте, который я пишу.

Я пытаюсь сказать pass, если какая-либо строка в столбце содержит определенную строку. Итак, на словах я хочу, чтобы «если число строк, содержащих astring, больше нуля, чем пройденный тест».

У меня есть что-то вроде приведенного ниже кода, но он не отвечает, что нужно myVariable быть объявленным. Что я делаю не так?

    DECLARE @myVariable BIT =
            (
                SELECT CASE
                           WHEN Count(Description) LIKE '%astring%' > 0
                                 THEN
                               1
                           ELSE
                               0
                       END
                FROM TABLE

SELECT @myVariable

Ответы [ 3 ]

2 голосов
/ 03 апреля 2020

Я думаю, вы хотите:

DECLARE @myVariable BIT =
        (SELECT (CASE WHEN Count(*) > 0 THEN 1 ELSE 0 END)
         FROM TABLE
         WHERE Description LIKE '%astring%' 
        );

Я бы не рекомендовал bit для этого. SQL Сервер действительно не поддерживает логические значения. Целые числа (или даже tinyint с) обычно легче работать, чем bit с.

1 голос
/ 03 апреля 2020

Just:

DECLARE @myVariable BIT = (
    SELECT MAX(CASE WHEN Description LIKE '%astring%' THEN 1 ELSE 0 END)
    FROM mytable
);

Устанавливает значение переменной 1, если хотя бы в одной строке таблицы есть Description, соответствующий шаблону.

0 голосов
/ 07 апреля 2020
DECLARE @myVariable BIT=
     (
      SELECT IIF(ISNULL(count(*),0)>0,1,0) 
      FROM TABLE
      WHERE EXISTS(SELECT * FROM TABLE WHERE Description LIKE '%astring%')
     )

SELECT @myVariable AS myVariable
...