解决mysql oracle 空串和空不兼容的问题
表结构及数据如下:
问题:表testtable中字段B可能为空时,'5'为传入变量,select * from testtable where B != '5',此时mysql返回结果为:
但原意为想返回全部数据,包括为空的数据。
1、新建函数nlnull(当str1为空或空串时返回str2),此函数名由nvl函数名扩展而来。
CREATE FUNCTION `nlnull`(str1 TINYTEXT, str2 TINYTEXT)
RETURNS tinytext
DETERMINISTIC
begin
declare c TINYTEXT;
select case when str1 is null then str2 when str1 = '' then str2 else str1 end into c;
return c;
end;
2、当表A中字段B可能为空时,x为传入变量,sql需要改为:
nlnull(A,' ') != x 注意' '中必须带有空格,这是由于oracle中认为空串和空是相等的
3、正确返回结果: