網站首頁 編程語言 正文
Oracle中nvl()與nvl2()函數詳解:
- 函數nvl(expression1,expression2)根據參數1是否為null返回參數1或參數2的值;
- 函數nvl2(expression1,expression2,expression3)根據參數1是否為null返回參數2或參數3的值。
1.nvl:根據參數1是否為null返回參數1或參數2的值
【函數格式】:nvl(expression1,expression2)
【函數說明】:
- 若expression1值為null,則該函數返回expression2;
- 若expression1值不為null,則該函數返回expression1;
- 若expression1、expression2的值均為null,則該函數返回null。
【特別說明】:參數expression1和expression2可以是字符型、數字型或日期型,但參數expression1與expression2的類型必須一致。
【樣例展示一】:expression1值為null:
expression2為字符型:
select nvl(null,'ABCD') from dual; --返回:ABCD
select nvl(null,'abcd') from dual; --返回:abcd
select nvl(null,'12345') from dual; --返回:12345
expression2為數值型:
select nvl(null,12345) from dual; --返回:12345
select nvl(null,00000) from dual; --返回:0
select nvl(null,-12345) from dual; --返回:-12345
select nvl(null,123.45) from dual; --返回:123.45
select nvl(null,-123.45) from dual; --返回:-123.45
expression2為日期時間型:
select nvl(null,sysdate) from dual; --返回:2022/2/25 11:54:18
select nvl(null,to_date('2022/2/25 11:54:18','yyyy-mm-dd hh24:mi:ss')) from dual; --返回:2022/2/25 11:54:18
select nvl(null,to_date('2022/2/25','yyyy-mm-dd')) from dual; --返回:2022/2/25
select nvl(null,to_date('2022','yyyy')) from dual; --返回:2022/2/1
【樣例展示二】:expression1值不為null:
expression1為字符型:
select nvl('ABCD','abcd') from dual; --返回:ABCD
select nvl('abcd','ABCD') from dual; --返回:abcd
select nvl('12345','54321') from dual; --返回:12345
expression1為數值型:
select nvl(12345,null) from dual; --返回:12345
select nvl(00000,11111) from dual; --返回:0
select nvl(-12345,null) from dual; --返回:-12345
select nvl(123.45,-123.45) from dual; --返回:123.45
select nvl(-123.45,123.45) from dual; --返回:-123.45
expression1為日期時間型:
select nvl(sysdate,null) from dual; --返回:2022/2/25 12:18:23
select nvl(to_date('2022/2/25 12:18:23','yyyy-mm-dd hh24:mi:ss'),null) from dual; --返回:2022/2/25 12:18:23
select nvl(to_date('2022/2/25','yyyy-mm-dd'),null) from dual; --返回:2022/2/25
select nvl(to_date('2022','yyyy'),null) from dual; --返回:2022/2/1
【樣例展示三】:expression1、expression2值均為null:
select nvl(null,null) from dual; --返回空值
select nvl('',null) from dual; --返回空值
select nvl(null,'') from dual; --返回空值
select nvl('','') from dual; --返回空值
2.nvl2:根據參數1是否為null返回參數2或參數3的值
【函數格式】:nvl2(expression1,expression2,expression3)
【函數說明】:
- 若expression1值不為null,則該函數返回expression2值;
- 若expression1值為null,則該函數返回expression3值;
- 若expression1、expression2、expression3值均為null,則該函數返回null。
【特別說明】:
- expression1的類型不需要與expression2和expression3的類型保持一致;
- expression2與expression3的類型盡量保持一致,若不一致,當expression1為null時,則expression3會自動轉換為expression2的類型,若兩個數據類型之間無法轉換,則會報錯。
【樣例展示一】:expression1值不為null:
expression2和expression3均為字符型:
select nvl2(0,'ABCD','abcd') from dual; --返回:ABCD
select nvl2('a','ABCD','1234') from dual; --返回:ABCD
select nvl2(sysdate,'1234','abcd') from dual; --返回:1234
expression2和expression3均為數值型:
select nvl2(0,12345,54321) from dual; --返回:12345
select nvl2('a',123.45,543.21) from dual; --返回:123.45
select nvl2(sysdate,-12345,-54321) from dual; --返回:-12345
expression2和expression3數據類型不一致:
? ? ? ? 注意:此時expression1有值,因此該函數直接返回expression2的值,即使expression3的類型無法轉換為expression2的類型也不會報錯。
select nvl2(0,'ABCD',54321) from dual; --返回:ABCD
select nvl2('a','abcd',543.21) from dual; --返回:abcd
select nvl2(sysdate,'12345',-54321) from dual; --返回:12345
【樣例展示二】:expression1值為null:
expression2和expression3均為字符型:
select nvl2(null,'ABCD','abcd') from dual; --返回:abcd
select nvl2('','ABCD','1234') from dual; --返回:1234
expression2和expression3均為數值型:
select nvl2(null,12345,54321) from dual; --返回:54321
select nvl2('',123.45,543.21) from dual; --返回:543.21
expression2和expression3數據類型不一致:
? ? ? ? 注意:此時expression1值為null,因此該函數會返回expression3的值,若expression3的類型無法轉換為expression2的類型,則會報錯。
select nvl2(null,'ABCD',54321) from dual; --返回:54321
select nvl2('','abcd',543.21) from dual; --返回:543.21
select nvl2('',543.21,'abcd') from dual; --執行報錯
select nvl2(null,'abcd',sysdate) from dual; --返回:25-2月 -22
select nvl2(null,sysdate,'abcd') from dual; --執行報錯
【樣例展示三】:expression1為null,且expression2或expression3值為null:
select nvl2(null,null,'123') from dual; --返回:123
select nvl2(null,'abc',null) from dual; --返回:空值
select nvl2(null,null,null) from dual; --返回:空值
select nvl2('','','') from dual; --返回:空值
總結
原文鏈接:https://blog.csdn.net/qq_40018576/article/details/123125215
相關推薦
- 2022-07-11 UVM中超時退出set_timeout函數
- 2022-10-29 Centos8系統配置Redis實現開機自啟
- 2022-10-15 QT?UDP網絡編程實現簡單消息傳輸_C 語言
- 2022-08-31 docker(alpine+golang)?中?hosts?不生效問題解決方法_docker
- 2022-12-23 C++類的返回值是*this的成員函數問題_C 語言
- 2022-10-19 python用opencv將標注提取畫框到對應的圖像中_python
- 2022-08-05 處理“URIError: URI malformed“的辦法
- 2022-04-01 k8s no matches for kind “Ingress“ in version “exte
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支