【问题标题】:SQL Server functional equivalent to PostgreSQL "in"SQL Server 功能等同于 PostgreSQL "in"
【发布时间】:2010-09-25 08:51:31
【问题描述】:
在 postgres 中,您可以像这样与多个项目进行比较:
SELECT 'test' IN ('not','in','here');
和做的一样:
SELECT ('test' = 'not' OR 'test' = 'in' OR 'test' = 'here');
是否有与 SQL Server 等效的功能?
【问题讨论】:
标签:
sql-server
postgresql
【解决方案1】:
它受支持,但您需要将表达式放在接受布尔表达式的地方。例如,在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)
【解决方案2】:
这应该在所有最新版本的 MSSQL 中给出类似的结果。您还可以编写一个标量函数来缩短一些时间。
select case
when 'test' IN ('not', 'in', 'here') then 1
else 0
end;
【解决方案3】:
如果“test”在比较集中 1 次或多次,则为 1,否则为 0。
SELECT CAST(COUNT(*) AS BIT) as IsItHere WHERE 'test' IN('not','in','here')
请注意,强制转换不是绝对必要的,但如果从另一种语言调用它可能会很有用...然后它应该解析为布尔值。
编辑:根据 MSSQL 查询规划器,它的执行速度比 CASE 方法快 4 倍。 YMMV。