CASE WHEN 语句在Oracle和Sybase库中的不同

来源:互联网 发布:淘宝里的名字怎么改 编辑:程序博客网 时间:2024/06/06 01:21

今天提交程序之后,反应有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 这种写法。

原创粉丝点击