SQL Server功能等效于PostgreSQL中的"in"

3
在Postgres中,您可以像这样对多个项进行比较:
 SELECT 'test' IN ('not','in','here');

这与执行以下操作相同:
  SELECT ('test' = 'not' OR 'test' = 'in' OR 'test' = 'here');

有没有适用于SQL Server的功能等效替代品?

你在这里寻找哪个版本的MSSQL? - Scott Ivey
3个回答

5

这是支持的,但您需要将表达式放在接受布尔表达式的某个位置。例如,在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

这应该在所有最近版本的MSSQL中产生类似的结果。您还可以编写一个标量函数来缩短代码。

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

0

如果'test'在比较集合中出现1次或更多次,则返回1,否则返回0。

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

请注意,强制转换并不是必需的,但如果从另一种语言调用,则可能会有用...然后应该解析为布尔值。
编辑:根据MSSQL查询计划程序的说法,这比CASE方法执行速度快约4倍。您的情况可能会有所不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接