用decode和nvl處理null值時需要注意的地方
測試table的記錄如下:
SQL> select * from testnvl;
ID FAB MONTH
---------- ---------- --------
2112 S1 2010-06
234 S2 2010-06
0 S3 2010-06
需要根據FAB和MONTH的值從表裡查ID,如果有值的顯示原值,如果沒有或為0的顯示成1。
SQL如下:
select decode(id,null,1,0,1,id) from testnvl where......
測試結果:
SQL> select decode(id,null,1,0,1,id) from testnvl where fab='S1' and month='2010-06';
DECODE(ID,NULL,1,0,1,ID)
------------------------
2112
SQL> select decode(id,null,1,0,1,id) from testnvl where fab='S3' and month='2010-06';
DECODE(ID,NULL,1,0,1,ID)
------------------------
1
SQL> select decode(id,null,1,0,1,id) from testnvl where fab='S4' and month='2010-06';
no rows selected
從以上結果可看出,在沒有符合條件的ID時,SQL並沒有按照預期返回1。如果對返回的ID做一下處理,比如加個sum,結果就會改變:
SQL> select decode(sum(id),null,1,0,1,sum(id)) from testnvl where fab='S4' and month='2010-06';
DECODE(SUM(ID),NULL,1,0,1,SUM(ID))
----------------------------------
1
這就是想要的結果了。
為什麼加了sum和不加sum會有區別呢,因為decode, nvl等函式是在返回的record上進行計算的,不加sum時返回記錄數為0,所以是不會對其做decode,nvl的判斷的。加了sum之後,返回記錄數為1,只是返回值為null,這樣就可以用decode和nvl進行判斷了:
SQL> select id from testnvl where fab='S4' and month='2010-06';
no rows selected
SQL> select sum(id) from testnvl where fab='S4' and month='2010-06';
SUM(ID)
----------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7919512/viewspace-1036751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於ORACLE MYSQL NOT IN和NOT exists需要注意的 NULL值OracleMySqlNull
- MySQL 中處理 Null 時要注意兩個陷阱MySqlNull
- Oracle中處理空值的函式nvl-nvl2-lnnvl-nullif的用法Oracle函式Null
- link流程 建立時需要注意的地方
- Oracle-空值null和數字相加的問題-nvl函式OracleNull函式
- oracle over()的使用和需要特別注意的地方Oracle
- jquery獲取ajax傳遞的值一個需要注意的地方jQuery
- Oracle 排序中常用的NULL值處理方法Oracle排序Null
- 【C#】-對於Null值的處理方法C#Null
- delete與delete[]需要注意的地方delete
- 進行爬蟲的時候需要注意哪些地方?爬蟲
- 行內元素和塊計元素需要注意的地方
- FastJson 序列化處理 null 值ASTJSONNull
- margin-top使用需要注意的地方
- /etc/fstab檔案需要注意的地方
- Spark2 Dataset DataFrame空值null,NaN判斷和處理SparkNullNaN
- Oracle 在連線條件裡處理和比較 NULL 值OracleNull
- 箭頭函式適用場景及需要注意的地方函式
- 對Oracle View授權和where查詢需要注意的地方OracleView
- js switch語句需要特別注意的地方JS
- 26個提升java效能需要注意的地方Java
- Struts中上傳檔案需要注意的地方
- springMVC的@ResponseBody、@RequestBody使用需要注意的地方SpringMVC
- 【Redis】redis-cluster需要注意的幾個地方Redis
- javascript原型繼承constructor需要注意的地方JavaScript原型繼承Struct
- javascript變數宣告需要注意的一個地方JavaScript變數
- 在PHP中使用類可能需要注意的地方PHP
- java打包exe程式需要注意的幾個地方Java
- oracle 11.2.0.3 版本 vote盤需要注意的地方Oracle
- 使用Context建立一個View需要注意的地方ContextView
- 伺服器搬遷需要注意的幾個地方伺服器
- PHP 去除 bom 頭,JSON_decode () 返回 NULL,PHP 無法對字串做處理PHPJSONNull字串
- Oracle空串與null的處理OracleNull
- cmake混編.c和.cpp需要注意的地方--指定兩種編譯器編譯
- 運用mysqldump 工具時需要注意的問題MySql
- 選擇雲伺服器有哪些需要注意的地方?伺服器
- 開發網路影片直播系統需要注意的地方
- hadoop中Combiner使用中需要注意的地方Hadoop