CASE WHEN 语句在Oracle和Sybase库中的不同
2017-09-14 14:00
399 查看
今天提交程序之后,反应有BUG,经仔细查询,发现一个之前并没注意到的问题,那就是case when 语句在Oracle中执行的BUG,用脚本来说明;
Oracle
--建表
CREATE TABLE TABLE_01
(CODE INT NOT NULL,
NAME VARCHAR2(20) NULL);
--插入数值,之所以分别插入null和''是因为在Sybase中''和null是两个不同的值
INSERT INTO TABLE_01 VALUES (1,'');
INSERT INTO TABLE_01 VALUES (2,NULL);
SELECT * FROM TABLE_01;
查询结果为:
使用不同的两种case when 语句查询:
SELECT CASE NAME WHEN '' THEN '1' WHEN NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
SELECT CASE WHEN NAME='' THEN '1' WHEN NAME IS NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
前者结果为3 后者结果为 2。也就是说case when 这两种方法Oracle虽然都能执行且不报错,但结果却完全不同,第一种写法无法比出null值。
SELECT CASE NAME WHEN '' THEN '1' WHEN NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
SELECT CASE WHEN NAME='' THEN '1' WHEN NAME IS NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
Sybase
--建表
CREATE TABLE TABLE_01
(CODE INT NOT NULL,
NAME VARCHAR(20) NULL)
--插入数值,之所以分别插入null和''是因为在Sybase中''和null是两个不同的值
INSERT INTO TABLE_01 VALUES (1,'')
INSERT INTO TABLE_01 VALUES (2,NULL)
SELECT * FROM TABLE_01
查询结果为:
,由此可见sybase中‘’和null不是一个值。
使用两种case when 查询结果:
结论:case when的两种写法,在sybase中随便使用,而在Oracle中则只能用case when cloumn=? then ? when column=? then ? else ? end 这种写法。
Oracle
--建表
CREATE TABLE TABLE_01
(CODE INT NOT NULL,
NAME VARCHAR2(20) NULL);
--插入数值,之所以分别插入null和''是因为在Sybase中''和null是两个不同的值
INSERT INTO TABLE_01 VALUES (1,'');
INSERT INTO TABLE_01 VALUES (2,NULL);
SELECT * FROM TABLE_01;
查询结果为:
使用不同的两种case when 语句查询:
SELECT CASE NAME WHEN '' THEN '1' WHEN NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
SELECT CASE WHEN NAME='' THEN '1' WHEN NAME IS NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
前者结果为3 后者结果为 2。也就是说case when 这两种方法Oracle虽然都能执行且不报错,但结果却完全不同,第一种写法无法比出null值。
SELECT CASE NAME WHEN '' THEN '1' WHEN NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
SELECT CASE WHEN NAME='' THEN '1' WHEN NAME IS NULL THEN '2' ELSE '3' END FROM TABLE_01 WHERE CODE=1;
Sybase
--建表
CREATE TABLE TABLE_01
(CODE INT NOT NULL,
NAME VARCHAR(20) NULL)
--插入数值,之所以分别插入null和''是因为在Sybase中''和null是两个不同的值
INSERT INTO TABLE_01 VALUES (1,'')
INSERT INTO TABLE_01 VALUES (2,NULL)
SELECT * FROM TABLE_01
查询结果为:
,由此可见sybase中‘’和null不是一个值。
使用两种case when 查询结果:
结论:case when的两种写法,在sybase中随便使用,而在Oracle中则只能用case when cloumn=? then ? when column=? then ? else ? end 这种写法。
相关文章推荐
- case when在sqlserver和oracle的不同写法
- Oracle-Sql 语句中 Case When 的应用
- Oracle 和Sybase排序不同
- 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
- 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
- oracle中创建insert select from 语句实现两个表中某一个字段相同统计其他不同字段的情况
- Oracle-Decode()函数和CASE语句的不同
- 关于Oracle语句中case when起别名
- 关于Oracle和SQLServer数据库在.net中拼接数据库语句的不同
- Oracle 和SQL Server 语句与数据类型使用上的不同之处 (转)
- Oracle-Decode()函数和CASE语句的不同
- sybase导出来的sql建表语句导入Oracle出错--解决办法
- oracle 语句与sql server之不同
- Oracle-Decode()函数和CASE语句的不同
- Oracle 通过语句返回指定的字段且是不同值的数目
- oracle查询语句中case when的使用
- C_连接Access、SQL_Server、Oracle、MySQL、DB2和SyBase六种不同数据库的程序源码和需要注意的点
- 当执行SQL(ORACLE)时判段另一个字段的值去执行不同SQL,及 CASE WHEN 语句的使用
- C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase六种不同数据库的程序源码和需要注意的点
- Oracle查询语句中rownum与rowid的不同之处分析