【问题标题】:Is there a ternary conditional operator in T-SQL?T-SQL 中是否有三元条件运算符?
【发布时间】:2013-04-19 01:15:38
【问题描述】:

实现以下查询的替代方法是什么:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0

【问题讨论】:

  • 当然,您在标题中提出的问题的答案是 - 当然。 BETWEEN 运算符被定义为采用三个参数。您正在寻找的是一个 conditional 运算符 - happens 是唯一一个定义为采用大多数语言定义的三个参数的运算符。
  • @JFA - 不,a 三元运算符是采用三个操作数的任何运算符。在大多数语言中,if 它们有任何三元运算符,通常它们只有一个,即(通常)称为条件运算符。用错误的名字来称呼事物(或者当你指的是一个特定的名字时使用一个通用的名字)只会导致更多的混乱。如需进一步指导,请查阅ternary-operator 标签维基。
  • @Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation :见“三元运算符”
  • @TimothyKanski - 考虑到我以前的 cmets 的内容和样式(例如特别强调 a),你认为我没有意识到这一点吗?
  • OP 使用了事物的通用名称,而不是错误或过于笼统的名称。我不同意您的结论,即当它确实是常用术语时,专业人士(为他们建立本网站)会对此感到困惑。

标签: sql-server tsql


【解决方案1】:

在 SQL Server 2012 中,您可以使用IIF function

SELECT *
FROM table
WHERE isExternal = IIF(@type = 2, 1, 0)

另请注意:在 T-SQL 中,赋值(和比较)运算符只是 =(而不是 == - 那是 C#)

【讨论】:

    【解决方案2】:

    使用case:

    select *
    from table
    where isExternal = case @type when 2 then 1 else 0 end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-08
      • 2022-01-24
      • 2011-08-25
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2023-04-11
      相关资源
      最近更新 更多