CASE WHEN 语句在Oracle和Sybase库中的不同
今天提交程序之后,反应有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;
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 这种写法。