【问题标题】:isnull(@variable, 1) but for 0 instead of nullisnull(@variable, 1) 但为 0 而不是 null
【发布时间】:2020-01-24 09:18:09
【问题描述】:

我有一个等式,可以将大量变量相乘,如果其中一个变量为 0,那么我不希望它包含在等式中,将其替换为不会影响结果的 1。

当每个变量验证它们是否大于 0 时,验证它们的语句有点笨拙。

是否有类似 IsNull 的函数,如果变量为 0 则返回替代值?

--edit @Backs 答案是正确的,但显然在取出 sql 2012 iif 之后,当我尝试编写语句时,'=' 符号处出现语法错误。 sql-2012之后有iif的替代品吗?

【问题讨论】:

  • 有点笨拙:ISNULL(NULLIF(x,0), 1),或IIF(x=0,1,x)
  • 您说使用 CASE 会“花费太长时间”,这是什么意思?您的意思是评估比较到 0 的性能会太慢吗?

标签: sql tsql


【解决方案1】:
IIF(@variable = 0, 1, @variable)

【讨论】:

  • IIFCASE 表达式的语法糖,OP 不想要(尽管他们的推理似乎不对)
  • 所以这应该可以工作,但显然 iif 在 sql 2012 之后被删除了。是的 @HoneyBadger 是对的,我正在寻找最语法糖分的方法
  • declare @t int = 1 select iif (@t = 0, 1, @t) 返回Incorrect syntax near '='.
  • @r_mat,在 sql server 2016 上不适合我
  • SSMS 只是 sql server 的 GUI。你有什么版本的sql server (SELECT @@VERSION)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多