Oracle中的case when的使用

今天要用SQL实现一个小小的逻辑,总之呢,需要用到一些判断条件,所以准备使用一下

case when的用法,但是由于之前只写过case when else end单条语句,没有写过嵌套,而且

感觉sql写起来也不好调试,所以在网上找了下资料。

第一步,先写一个简单的嵌套测试一下:

select case when 1=1 then 
		case when 2<3 then
        		'2A'
        	else
          		'2B'  
        	end
       else '1A'
       end
from dual;

执行完毕,显示"2A"。于是在一步步往上面加,根据其语法,我们可以观察得出每一个case都要对应一个end结束符,else条件可要

可不要,与编程语言里面的if和else是相似的,那么现在实现一个这样的算法:

if(i > A && i< B){
	if(i - A > B - i){
		if(B - i > 0){
			return 60;
		}else{
			return B - i;
		}
	}else{
		if(i - A > 0){
			return 60;
		}else{
			i - A;
		}
	}
}else{
	return 0;
}

看看这个够复杂了吧,下面是实现后的SQL代码:

case when (A<i and B>i) then 
            case when i-A>B-i then
                case when B-i>0 then
                	60
                else
                	B-i
                end 
            else
                case when i-A>0 then
                  60
                else
                  i-A
                end
            end
        else 0
  end


只要注意格式就不会有问题了。

 

 

 

猜你喜欢

转载自blog.csdn.net/smach1991710/article/details/13003083