一个decode的SQL语句老是筛不出想要的数据,应该是判断的字段包括了NULL,instr无法对其行使正常的查找。Oracle中的instr,在被查找的字符串中找得到要查找的字符串,就返回其所在的位置数值,找不到就返回0,而如果被查找的字符串是NULL,就返回不了任何东西。
因此要对NULL先行处理,使用nvl,将NULL转换成其它数据,但是不能转换成空字符串(如nvl(data,''),否则instr还是用不了,虽然空字符串已经是字符型,但它没有长度(不信用length试试),其中上Oracle把它默认为NULL,虽然它实际上不能算NULL,可是用instr去搜索字符串,得到的还是空,不是0,也不是其它数值,还是不能发挥查找的功能。所以只能用nvl把NULL处理成一个空格,nvl(data,' '),这样才能正常使用instr。''和' '是不一样的,虽然都是字符型,但后者有一个空格在单引号里,就不是空值,它的长度就是1。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/1636.html