1,select *from 表 where NVL(字段名A,'') = '';
2,SELECT *FROM 表 WHERE 字段名A IS NULL OR 字段名A = ';两句的执行结果不一样
第一句查不出数据
第二句可以查到数据这个如何解释?
2,SELECT *FROM 表 WHERE 字段名A IS NULL OR 字段名A = ';两句的执行结果不一样
第一句查不出数据
第二句可以查到数据这个如何解释?
解决方案 »
- 求哪位大师帮我做下。不会编
- 问一个有挑战性的SQL问题
- 请问:oracle系统自带的OUTLAN用户被误删除了,如何建立呢?
- sql怎么写?table1(col0,col1,col2),table2(col2,col3),
- oracle 9i在哪个工具中执行exp命令?
- 各位指点一下小弟:请问 select sysdate from all_users; 的意思 是不是和 一般的 select * from tab;有区别?
- oracle无法启动,请各位高手帮帮我!!!!
- 如何移动数据文件、日志文件,请高手指教!
- 如何使oracle表的行记录不区分大小写
- 服务器上oracle数据库实例最近两月就挂掉一次,报472错误,还没查到具体问题,求帮忙啊,万分感谢!
- sql子查询问题
- sql修改语句,修改字段中的部分文本内容。
NVL lets you replace a null (blank) with a string in the results of a querywith t as
(
select 'a' id , '' name from dual
union all
select 'b' id , 'bb' name from dual
union all
select 'c' id , 'cc' name from dual
)--select *from t where NVL(t.name,'') = '';
SELECT *FROM t WHERE t.name IS NULL OR t.name = '';
说白了 就是oracle sql中的null 必须是用is去判断 不能用 =
并不是总会去做替代的。
第一句,你的nvl(字段名A,'') = '',由于oracle中''就是null,而null = null的值为false,所以你的第一句SQL是查不出来null值的记录。第二句,你的字段名A IS NULL 是可以查出来null值的记录的。
NVL(字段名A,'') = '';相当于什么就没做,''和NULL在ORACLE中是一样的。
2,SELECT *FROM 表 WHERE 字段名A IS NULL OR 字段名A = '';
with tmp_Data as (
select 1 ID, Null V_NULL, '' V_STR from dual --空字符跟Null对比
union
select 2 ID, '' V_NULL, '' V_STR from dual --空字符跟空字符对比
union
select 3 ID, Null V_NULL, Null V_STR from dual --NULL跟Null对比
)
select id,
case when v_NULL=V_STR then 1 else 0 end 是否相等,
case when nvl(v_NULL, '') = V_STR then 1 else 0 end 是否相等_NVL
from tmp_Data;