日期:2014-05-17  浏览次数:20876 次

Oracle数据库中的空与NULL的关系
如在.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()方法来去掉左右的空格,而如果我们在查询的条件之中恰好是空格时,那不是查出不数据了吗??这不是存在问题了吗?请问一下碰到这种情况应该办呢???

------解决方案--------------------
探讨
这里我补充一下,一般我们在程序当中保存数据时也会将左右空间去掉,在存入了Oracle数据库当中时,却被当作为了NULL,导致要查为空的数据时却查不出来,我总感觉这有挺头痛的。。。

在SQL SERVER中却不存在这样的问题。。。。。急求解啊,以上为个人见解,望高人指点。。。

------解决方案--------------------
=null?
改成 is null
------解决方案--------------------
探讨
引用:
这里我补充一下,一般我们在程序当中保存数据时也会将左右空间去掉,在存入了Oracle数据库当中时,却被当作为了NULL,导致要查为空的数据时却查不出来,我总感觉这有挺头痛的。。。

在SQL SERVER中却不存在这样的问题。。。。。急求解啊,以上为个人见解,望高人指点。。。

SQL code--试试这样看看
select * from t_ta……

------解决方案--------------------
探讨
如在.NET的程序中写这样的查询语句:
string filter = "";
string sql = "select * from t_table where name='" + filter + "'";

咋看之下这个查询执行应该是没有什么问题的,但是结果却是没有任何数据能被查询出来;就算改成如下语句也没用:
string sql = "select * from t_table……