Oracle 將null值轉化為其他值__Oracle

來源:互聯網
上載者:User

-- Start

我個人認為資料庫中不應該有null值,因為他顛覆了二值邏輯結構(即:真和假),出現了三值邏輯結構(即:真、假和未知)。由於null,我們的SQL語句很有可能出現意想不到的結果。此外null值和其他值進行數值運算的時候也會帶來問題。但是,有時候有些事情並不是我們能夠控制和改變的,作為一名真正的程式員,應該敢於面對最垃圾的資料庫設計。下面給大家介紹如何將null值轉化為其他值。

CREATE TABLE EMPLOYEE(    NAME      VARCHAR2(20) NOT NULL,   -- 姓名    SALARY    NUMBER,                  -- 基本工資    BONUS     NUMBER                   -- 獎金);INSERT INTO EMPLOYEE VALUES ('張三', 3000.0, NULL);INSERT INTO EMPLOYEE VALUES ('李四', 4000.0, 0.0);INSERT INTO EMPLOYEE VALUES ('王五', 5000.0, 1000.0);-- 下面幾條語句是等價的SELECT CASE WHEN BONUS IS NULL THEN 0.0 ELSE BONUS END FROM EMPLOYEE;SELECT COALESCE(BONUS, 0.0) FROM EMPLOYEE;SELECT NVL(BONUS, 0.0) FROM EMPLOYEE;-- 下面兩條語句是等價的SELECT CASE WHEN BONUS IS NOT NULL THEN BONUS ELSE 0.0 END FROM EMPLOYEE;SELECT NVL2(BONUS, BONUS, 0.0) FROM EMPLOYEE;

假設你要尋找總工資(基本工資+獎金)大於等於3000元的員工,我們很自然的會寫出下面的語句:

SELECT * FROM EMPLOYEE WHERE SALARY + BONUS >= 3000.0;

但是很不幸,這條語句並不是永遠正確,當SALARY或BONUS有一個值是null的時候,我們很可能會漏掉部分資料(會漏掉哪些資料呢。朋友們自己思考一下),這就是我認為資料庫中不應該有null值的原因之一,如果你不是決策者,無法改變資料庫設計,我們可以這樣寫:

SELECT * FROM EMPLOYEE WHERE NVL(SALARY, 0.0) + NVL(BONUS, 0.0) >= 3000.0;

有沒有更簡單的辦法呢。答案是肯定的。

-- 如果條件是假或未知,LNNVL 函數返回真SELECT * FROM EMPLOYEE WHERE LNNVL(SALARY + BONUS < 3000.0);


知道了如何將 null 轉換成其他值,現在讓你把其他值轉成 null 該怎麼辦呢。呵呵試一試下面的語句吧。

SELECT NULLIF(BONUS,0.0) FROM EMPLOYEE;SELECT CASE WHEN BONUS = 0.0 THEN NULL ELSE BONUS END FROM EMPLOYEE;

還有一個函數用來將 BINARY_FLOAT_NAN 和 BINARY_DOUBLE_NAN 轉成其他值。

SELECT NANVL(BINARY_FLOAT_NAN, 0.0) FROM DUAL;SELECT NANVL(BINARY_DOUBLE_NAN, 0.0) FROM DUAL;

-- 更多參見:Oracle SQL 精萃

-- 聲明:轉載請註明出處

-- Last Edited on 2015-06-19

-- Created by ShangBo on 2014-12-18

-- End

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.