Sql中的if函数学习
今天,在修改項目bug時遇到一些需要計算的功能實現,雖然可以用java代碼寫,但是由于時間較為充裕,有嘗試用sql寫一下,學習到了if函數
if(o.containerSendNet>0 and o.pieceNumber=0 , o.containerSendNet*IFNULL(o.transport_price2,0),0) transitWeightMoney
上面這段話的意思是:
如果o.containerSendNet>0 and o.pieceNumber=0 成立為true,則返回o.containerSendNet*IFNULL(o.transport_price2,0),即transitWeightMoney = o.containerSendNet*IFNULL(o.transport_price2,0)
否則返回0,即transitWeightMoney = 0;
而IFNULL函數,則是判斷第一個表達式是否為null,即IFNULL(o.transport_price2,0),如果o.transport_price2不為null,則返回這個值,否則返回0。
下面摘抄我看到的一篇博客:https://blog.csdn.net/qq_36850813/article/details/80449860
IF 表達式
IF( expr1 , expr2 , expr3 )
expr1 的值為 TRUE,則返回值為 expr2
expr1 的值為FALSE,則返回值為 expr3
如下:
SELECT IF(TRUE,1+1,1+2);
-> 2
SELECT IF(FALSE,1+1,1+2);
-> 3
SELECT IF(STRCMP("111","222"),"不相等","相等");
-> 不相等
那么這個 IF 有啥用處呢?舉個例子:
查找出售價為 50 的書,如果是 java 書的話,就要標注為 已售完
那么對應的SQL語句該怎樣去寫呢?
select *,if(book_name='java','已賣完','有貨') as product_status from book where price =50
IFNULL 表達式
IFNULL( expr1 , expr2 )
判斷第一個參數expr1是否為NULL:
如果expr1不為空,直接返回expr1;
如果expr1為空,返回第二個參數 expr2
常用在算術表達式計算和組函數中,用來對null值進行轉換處理(返回值是數字或者字符串)
在 expr1 的值不為NULL的情況下都返回 expr1,否則返回 expr2,如下:
SELECT IFNULL(NULL,"11");
-> 11
SELECT IFNULL("00","11");
-> 00
NULLIF 表達式
NULLIF(expr1,expr2):如果兩個參數相等則返回NULL,否則返回第一個參數的值expr1
mysql> select nullif(1,1),nullif(123,321); +-------------+-----------------+ | nullif(1,1) | nullif(123,321) | +-------------+-----------------+ | NULL | 123 | +-------------+-----------------+
3、在SQL語句中實現“if-then-else”邏輯計算功能
有兩種形式:simple case和searched case
1)simple case的語法結構:
CASE value
WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result ...]
[ELSE result] END
語義:
將case后面的值value分別和每個when子句后面的值compare_value進行相等比較:
如果一旦和某個when子句后面的值相等則返回相應的then子句后面的值result;
如果和所有when子句后面的值都不相等,則返回else子句后面的值;
如果沒有else部分則返回null。
注意:
①value可以是字面量、表達式或者列名
②CASE表達式的數據類型取決于跟在then或else后面的表達式的類型
類型必須相同(可嘗試做隱式類型轉換),否則出錯
mysql> select userid,case salary
-> when 1000 then 'low'
-> when 2000 then 'med'
-> when 3000 then 'high'
-> else '無效值' end salary_grade
-> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
| 1 | low |
| 2 | med |
| 3 | high |
| 4 | 無效值 |
| 5 | low |
+--------+--------------+
2)searched case的語法結構:
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result] END
語義:
如果某個when子句后面的條件condition為true,則返回相應的when子句后面的值result;
如果所有的when子句后面的條件condition都不為true,則返回else子句后面的值;
如果沒有else部分則返回null。
mysql> select userid,case
-> when salary<=1000 then 'low'
-> when salary=2000 then 'med'
-> when salary>=3000 then 'high'
-> else '無效值' end salary_grade
-> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
| 1 | low |
| 2 | med |
| 3 | high |
| 4 | 無效值 |
| 5 | low |
+--------+--------------+
總結
以上是生活随笔為你收集整理的Sql中的if函数学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 形象照艺术照和写真的区别(经营多年照相馆
- 下一篇: 中国多少亿人口2021(到2050年我国