在學習hive過程中遇到了乙個問題:如果查詢語句中的表示式包含空值,會導致最終表示式結果為空值。
舉乙個例子,假設有乙個員工表emp
name
salcomm
jack
1000
200tony
1200
300tom
1300
null
rose
900100
lily
800500
tim1100
null
表中第一列是姓名,第二列是月薪,第三列是獎金
現在想獲得年薪和年收入,其中:
年薪 = sal * 12
年收入 = sal * 12 + comm
select name, sal * 12, sal * 12 + comm
from emp;
查詢結果:
name
sal * 12
sal * 12 + comm
jack
12000
12200
tony
14400
14700
tom15600
null
rose
10800
10900
lily
9600
10100
tim13200
null
可以看到涉及到空值的表示式無法正常表示
經過查詢發現了乙個解決方法:nvl函式
nvl函式:空值轉換函式
函式形式:nvl(expr1,expr2)
作用:將查詢為null值轉換為指定值
注意:
若expr1為null,則返回expr2,否則返回expr1
適用於數字型、字元型和日期型,但是expr1和expr2的資料型別必須為相同型別
select name, sal * 12, sal * 12 + nvl(comm, 0)
from emp;
查詢結果:
name
sal * 12
sal * 12 + comm
jack
12000
12200
tony
14400
14700
tom15600
15600
rose
10800
10900
lily
9600
10100
tim13200
13200
細說plsql中的空值表示式
最近寫sql的時候遇到了一些麻煩,一翻深究之後發現了關於空值表示式的規律,先看幾個例子 declare a integer b integer c boolean begin a 1 b null c a b if a b then dbms output.put line print yes el...
用正規表示式匹配「空值」
最近在做乙個專案,要讀取文字檔案匯入資料庫,但是為了效能和介面友好的問題,於是打算匯入之前檢查文字檔案的格式是否正確,如果不正確,則作出相應提示而停止匯入,所以要對文字檔案逐行掃瞄,然後檢查每一行的格式,如果不符合約定的格式,則提示使用者對應的行數。自然而然想到用正規表示式。但是就有個問題了,文字檔...
Python中 表示式和 is 的區別
x y表示兩個物件的值相同,x is y表示兩者是同乙個物件 例1 x和y是兩個列表,它們的值相同,但不是同乙個物件 x 1,2,3 y 1,2,3 x y true x is y false 例2 x和y是同乙個物件 x 1,2,3 y x x is y true 例3 字典是無序的,所以x和y的...