关于Oracle的decode函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Oracle的decode函数相关的知识,希望对你有一定的参考价值。
decode(字段,条件1,正常,条件2,异常)。这里我的条件1和条件2不是一个具体的值,而是字段的值大于60,异常,小于60的话正常。比如说以下一列数字:
20
40
80
如果是20或40的话返回正常,80的话就返回异常,这样的话decode函数能实现吗?
如果不能实现,有什么方法实现,请大神指教
我需要匹配的是一个条件,而不是一个具体的值,不要拿复制的答案,好不好。
不过decode要实现这个大于小于就要用到sign函数进行组合。
decode(sign(字段-60),-1,'正常',1,'异常')
建议用case when then
case when 字段<60 then ‘正' when 字段>60 then '异常' else '其他' end追问
你的答案更好,只不过刚才没看见,已经选择采纳答案了,不好意思啊,太谢谢你了
参考技术A DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result 是一组成序偶的结果值
default_result 未能与任何一序偶匹配成功时,函数返回的默认值
下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM checkup; 参考技术B
换个思路嘛:
union
select 'exception' from table_ where flag>60 参考技术C
DECODE不能实现条件转化
你的情况需要用CASE WHEN
CASE WHEN 字段>=60 THEN '正常' ELSE '异常' END本回答被提问者采纳以上是关于关于Oracle的decode函数的主要内容,如果未能解决你的问题,请参考以下文章
关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service