SQL中的分层与短路赋值



SQL是否同时具有短路和分层多求值语法?

短路分配示例。这里decision得到FIRST ***子句,当…是真的:

<标题>短路h1> 级赋值的例子。这里decision得到LAST ***表达式当…是真的。<标题>层次h1> Inter-Conversion h1> 然,反转表达式的顺序在分层和短路之间切换。我想知道SQL是否也有一个结构,将分配LAST tr表达式?<标题>测试用例:

下面是一个非常简单的玩具例子:

select 
  flag1, flag2, flag3,
  case
     when flag1=1 and flag2=0 then 'LEFT'
     when flag1=0 and flag2=0 then 'NONE'
     when flag2=0 and flag3=1 then 'RIGHT'
  end as decision 
FROM 
( select 
  1 as flag1, 0 as flag2, 1 as flag3
  -- from dual                               -- if you use Oracle
) tmp ;

短路SQL将返回'LEFT'

分级赋值将返回'RIGHT'。

Edit:您可以通过单击链接在SQL-Fiddle中运行此示例。(感谢hypercube指出这个有用的网站!(+ 1))

没有表达式可以在一次选择中执行层次赋值,但它可以像任何其他编程语言一样通过多个if语句来实现

DECLARE @flag1 BIT = 1, @flag2 BIT = 0, @flag3 BIT = 1, @decision VARCHAR(50)
IF @flag1 = 1 AND @flag2 = 0
    SET @decision = 'LEFT'
IF @flag1 = 0 AND @flag2 = 0
    SET @decision = 'NONE'
IF @flag2 = 0 AND @flag3 = 1
    SET @decision = 'RIGHT'
SELECT @decision

对于SQL来说,这不是很重要,因为你最终在CASE WHEN子句中只有一个值。所以你所需要做的就是重新安排你的条件。

在其他语言中,你做一些计算存储在变量等中,在 SQL中,情况并非如此。

相关内容

  • 没有找到相关文章

最新更新