您的位置:首页 > 数据库 > Oracle

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 这种写法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  case when