The*_*ost 20 sql sybase case case-when
给出以下案例陈述:
1 WHEN r.code= '00' then 'A1'
2 WHEN r.code ='01' AND r.source = 'PXWeb' then 'A2' <
3 WHEN r.code ='0120' then 'A3'
4 WHEN r.code ='01' then 'A4' <
5 WHEN r.code ='1560' then 'A5'
6 WHEN r.code ='1530' then 'A6'
7 WHEN r.code ='1550' then 'A7'
Run Code Online (Sandbox Code Playgroud)
我假设第2行总是在第4行之前执行?然后我读了一些语句,比如' SQL是一种声明性语言,这意味着它告诉SQL引擎要做什么,而不是如何进行
并想知道这是否也与CASE声明中的执行顺序有关.基本上,我可以保留上面的代码,而不必将第4行更改为
4 WHEN r.code ='01' AND r.source != 'PXWeb' then 'A4'
Run Code Online (Sandbox Code Playgroud)
Dam*_*ver 21
返回的值将是匹配THEN的最早WHEN子句(文本)的表达式的值.这意味着如果符合第2行条件,结果将是A2.
但是,如果您的THEN表达式比文字值更复杂,那么即使不需要该表达式,也可能会发生一些评估这些表达式的工作.
例如
WHEN r.code= '00' then 'A1'
WHEN r.code ='01' AND r.source = 'PXWeb' then 'A2'
WHEN r.code ='0120' then 1/0
WHEN r.code ='01' then 'A4'
Run Code Online (Sandbox Code Playgroud)
即使r.code不等于0120,也可以通过零误差产生除法,即使它等于00,也就是说.我不知道这个特定问题的标准是什么,但我知道某些产品也是如此.
没关系:
“ CASE语句按顺序评估其条件,并从满足条件的第一个条件停止。”
http://msdn.microsoft.com/en-gb/library/ms181765.aspx