將null值轉(zhuǎn)化為其他值

將null值轉(zhuǎn)化為其他值

標(biāo)簽(空格分隔): DB2 SQL


我個人認(rèn)為數(shù)據(jù)庫中不應(yīng)該有null值,因?yàn)樗嵏擦硕颠壿嫿Y(jié)構(gòu)(即:真和假),出現(xiàn)了三值邏輯結(jié)構(gòu)(即:真、假和未知)。由于null,我們的SQL語句很有可能出現(xiàn)意想不到的結(jié)果。此外null值和其他值進(jìn)行數(shù)值運(yùn)算的時候也會帶來問題。但是,有時候有些事情并不是我們能夠控制和改變的,作為一名真正的SQL開發(fā)者,應(yīng)該敢于面對最垃圾的數(shù)據(jù)庫設(shè)計(jì)。下面給大家介紹如何將null值轉(zhuǎn)化為其他值。

有兩個函數(shù)可以將null值轉(zhuǎn)化為其它值:VALUE、COALESCE,它們的使用方法和作用完全相同。

語法:coalesce(<field>,<target_value>)
語法:value(<field>,<target_value>)
例如:select coalesce(id,0) from <table_name>
例如:select value(id,0) from <table_name>
說明:如果id為null,則把它轉(zhuǎn)化為0,否則的話不變。

考慮下面的情況:

CREATE TABLE
    USER
    (
        NAME VARCHAR(20) NOT NULL,---姓名
        SALARY1 FLOAT,---基本工資
        SALARY2 FLOAT---獎金
    ); 

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

SELECT
    NAME
FROM
    USER
WHERE
    SALARY1+SALARY2>3000;  

但是很不幸,這條語句并不是永遠(yuǎn)正確,當(dāng)SALARY1或SALARY2有一個值是null的時候,我們很可能會漏掉部分?jǐn)?shù)據(jù)(會漏掉哪些數(shù)據(jù)呢?朋友們自己思考一下),這就是我認(rèn)為數(shù)據(jù)庫中不應(yīng)該有null值的原因,如果你不是決策者,無法改變數(shù)據(jù)庫設(shè)計(jì),我們可以這樣寫:

SELECT
    NAME
FROM
    USER
WHERE
    COALESCE(SALARY1,0)+COALESCE(SALARY2,0)>3000;

SELECT
    NAME
FROM
    USER
WHERE
    VALUE(SALARY1,0)+COALESCE(SALARY2,0)>3000;  

這樣就可以保證查詢出的結(jié)果就是我們想要的結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容