【问题标题】: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 等效的功能?

【问题讨论】:

  • 你在这里寻找什么版本的 MSSQL?

标签: 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 2011-07-26
        相关资源
        最近更新 更多