Oracle PL/SQL判断两个字段相等或不等问题
2013-08-29 22:54
1076 查看
Oracle PL/SQL中判断两个两个字段相等或者不相等的时候,
常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到TRUE。
经过测试和分析,发现,并不是<>不稳定,而是字段值为NULL是,
不能使用=或者<>比较值,应该使用IS NULL判断是否为空。
可以把空理解为未知,一个非空和未知比较,结果还是未知.
当字段a1,a2,b1,b2中有一个或多个为空时,下面两个语句都会失效:
1. IF ( a1 <> a2 OR b1<>b2 ) THEN
2. IF ( a1 = a2 AND b1=b2 ) THEN
例如,如果a1为空,a2, b1,b2不空时,语句应该这么写
1. IF ( (a1 IS NULL AND a2 IS NOT NULL) OR b1<>b2 ) THEN
2. IF ( (a1 IS NULL AND a2 IS NULL) AND b1=b2 ) THEN
为了解决NULL带来的“无法判断相等或不等”的问题,我们可以使用NVL函数解决,语句如下:
1. IF ( NVL(a1,0) <> NVL(a2,0) OR NVL(b1,0) <> NVL(b2,0) ) THEN
2. IF ( NVL(a1,0) = NVL(a2,0) AND NVL(b1,0) = NVL(b2,0) ) THEN
注:NVL(args, deafultValue),args为变量,deafultValue为当args为空时,设置的默认值(一般为0)。
其中:NVL(a1, 0) 和 NVL(a1, '0') 效果一样,最后 a1 的值都是字符串: '0' (不是字符!).
常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到TRUE。
经过测试和分析,发现,并不是<>不稳定,而是字段值为NULL是,
不能使用=或者<>比较值,应该使用IS NULL判断是否为空。
可以把空理解为未知,一个非空和未知比较,结果还是未知.
当字段a1,a2,b1,b2中有一个或多个为空时,下面两个语句都会失效:
1. IF ( a1 <> a2 OR b1<>b2 ) THEN
2. IF ( a1 = a2 AND b1=b2 ) THEN
例如,如果a1为空,a2, b1,b2不空时,语句应该这么写
1. IF ( (a1 IS NULL AND a2 IS NOT NULL) OR b1<>b2 ) THEN
2. IF ( (a1 IS NULL AND a2 IS NULL) AND b1=b2 ) THEN
为了解决NULL带来的“无法判断相等或不等”的问题,我们可以使用NVL函数解决,语句如下:
1. IF ( NVL(a1,0) <> NVL(a2,0) OR NVL(b1,0) <> NVL(b2,0) ) THEN
2. IF ( NVL(a1,0) = NVL(a2,0) AND NVL(b1,0) = NVL(b2,0) ) THEN
注:NVL(args, deafultValue),args为变量,deafultValue为当args为空时,设置的默认值(一般为0)。
其中:NVL(a1, 0) 和 NVL(a1, '0') 效果一样,最后 a1 的值都是字符串: '0' (不是字符!).
相关文章推荐
- Oracle PL/SQL判断两个字段相等或不等问题
- PL/SQL 怎么判断两个结果集是否相等
- 数据库_ PL/SQL 怎么判断两个结果集是否相等
- oracle 定长字段查询问题 ,ibatis 与pl/sql查询的char类型字段查询不同
- oracle 定长字段查询问题 ,ibatis 与pl/sql查询的char类型字段查询不同
- oracle 定长字段查询问题 ,ibatis 与pl/sql查询的char类型字段查询不同
- Oracle PL/SQL比较两个字段是否一样
- 在PL/SQL Developer里设置Oracle数据库的字段自动递增功能
- 一个机器上同时安装有两个版本oracle时的pl/sql developer设置
- ORACLE sql 判断字段中某个字符出现次数
- PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决
- 直接比较两个对象是否相等返回false和List中判断是否包含某个对象的问题
- 64位WINDOWS 使用PL SQL DEVELOPER 连接ORACLE 出错问题解决
- oracle sql语句查询时 表名和字段名要加双引号的问题详解,oraclesql
- PL/SQL客户端连Oracle很快就断开问题的解决
- oracle sql通过判断条件更新数据库某个字段的值内容
- LINUX和pl/sql development上ORACLE显示乱码问题
- SQL语句order by两个字段同时排序问题
- Oracle/PL/SQL乱码问题
- Oracle sql语句查询日期字段没有时分秒问题