SQL Server функциональный эквивалент PostgreSQL «в» - PullRequest
3 голосов
/ 04 декабря 2008

В postgres вы можете сравнить несколько элементов, например:

 SELECT 'test' IN ('not','in','here');

То же самое, что и:

  SELECT ('test' = 'not' OR 'test' = 'in' OR 'test' = 'here');

Существует ли функциональный эквивалент для SQL Server?

Ответы [ 3 ]

5 голосов
/ 04 декабря 2008

Поддерживается, но вам нужно будет поместить выражение куда-нибудь, принимающее логическое выражение. Например, в операторе case:

select  case  when 'test' in ('not','in','here')  then 1  else 0  end

----------- 
0

(1 row(s) affected)

Или предложение where:

select * from T where C in (1,3,5,7,9)
0 голосов
/ 04 декабря 2008

Это даст 1, если 'test' находится в наборе сравнения 1 или более раз, или 0, если это не так.

SELECT CAST(COUNT(*) AS BIT) as IsItHere WHERE 'test' IN('not','in','here')

Обратите внимание, что приведение не является строго необходимым, но может быть полезно, если оно вызывается из другого языка ... Затем оно должно преобразоваться в логическое значение.

РЕДАКТИРОВАТЬ: Согласно планировщику запросов MSSQL, это выполняется в ~ 4 раза быстрее, чем метод CASE. YMMV.

0 голосов
/ 04 декабря 2008

это должно дать аналогичные результаты во всех последних версиях MSSQL. Вы также можете написать скалярную функцию, чтобы немного сократить время.

select case 
        when 'test' IN ('not', 'in', 'here') then 1
            else 0
            end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...