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 這種寫法。