2015-12-22 73 views
0
case when contact_number1 ='' or contact_number2 is null then contact_number1 
     when contact_number1 ='' or contact_number1 is null then contact_number2 
     when contact_number1 is not null and contact_number2 is not null then concat(contact_number1,',',contact_number2) 
end 

如果第一种情况是真的,那么它执行第一种情况下则进入下一个case语句或没有?postgresql中'case when'的执行过程是什么?

回答

0

你的case语句有3行的条件。

如果条件的第一行得到满足,是的,它也将尝试看看,如果第二排被满足,等等。把每一行看作一组独立的if语句。

0

基础上PostgreSQL documentation,我不相信所有的条件都执行 - 它执行的第一个语句,其条件得到满足,并跳过所有其他人。的文档的

有关部分:

CASE子句可以用于任何一个表达式是有效的。每个条件是一个返回布尔结果的表达式。如果条件的结果为真,则CASE表达式的值是该条件之后的结果,并且不处理CASE表达式的其余部分

+1

您还应该在该节末尾包含注释:“ *如第4.2.14描述的,存在其中表达式的子表达式是在不同时间评估各种情况,以使得“CASE评估仅在必要的子表达式”的原则是不铁定。例如,一个恒定的1/0子表达式将通常导致在规划的时候一个部门被零故障,即使它永远不会在运行时*输入一个CASE手臂内” –

+0

啊,错过了一部分,但它是有道理的 - 规划仍检查的条件以及能够出错,执行短路 - 感谢您的注意并补充说明! – romeara