如在.NET的程序中写这样的查询语句:
string filter = "";
string sql = "select * from t_table where name='" + filter + "'";
咋看之下这个查询执行应该是没有什么问题的,但是结果却是没有任何数据能被查询出来;就算改成如下语句也没用:
string sql = "select * from t_table where nvl(name,'' ='" + filter + "'";
下午花了很久才发现这里面的问题:这个主要是因为Oracle里面把''(空字符,中间没有空格)作为NULL来处理,如果将上面的语句改成下面这样就能查出name字段为空的数据行:
select * from t_table where trim(name) is null
或 select * from t_table where nvl(name,'') is null
这样的话就存在一个比较大的问题了,因为在程序当中我们一般都会用trim()方法来去掉左右的空格,而如果我们在查询的条件之中恰好是空格时,那不是查出不数据了吗??这不是存在问题了吗?请问一下碰到这种情况应该办呢???
------解决方案--------------------
------解决方案--------------------
=null?
改成 is null
------解决方案--------------------
------解决方案--------------------