日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Sql中的if函数学习

發(fā)布時間:2024/1/3 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 Sql中的if函数学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天,在修改項目bug時遇到一些需要計算的功能實現(xiàn),雖然可以用java代碼寫,但是由于時間較為充裕,有嘗試用sql寫一下,學(xué)習(xí)到了if函數(shù)

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函數(shù),則是判斷第一個表達式是否為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 書的話,就要標(biāo)注為 已售完

那么對應(yīng)的SQL語句該怎樣去寫呢?

select *,if(book_name='java','已賣完','有貨') as product_status from book where price =50  

IFNULL 表達式

IFNULL( expr1 , expr2 )  

判斷第一個參數(shù)expr1是否為NULL:

    如果expr1不為空,直接返回expr1;

    如果expr1為空,返回第二個參數(shù) expr2

常用在算術(shù)表達式計算和組函數(shù)中,用來對null值進行轉(zhuǎn)換處理(返回值是數(shù)字或者字符串)


在 expr1 的值不為NULL的情況下都返回 expr1,否則返回 expr2,如下:

    SELECT IFNULL(NULL,"11");  
    -> 11  
      
    SELECT IFNULL("00","11");  
    -> 00  

NULLIF 表達式

NULLIF(expr1,expr2):如果兩個參數(shù)相等則返回NULL,否則返回第一個參數(shù)的值expr1

 

mysql> select nullif(1,1),nullif(123,321);
+-------------+-----------------+
| nullif(1,1) | nullif(123,321) |
+-------------+-----------------+
|        NULL |             123 |
+-------------+-----------------+

3、在SQL語句中實現(xiàn)“if-then-else”邏輯計算功能

  有兩種形式:simple case和searched case

1)simple case的語法結(jié)構(gòu):

CASE  value

    WHEN  [compare_value] THEN  result

    [WHEN [compare_value] THEN  result ...] 

    [ELSE  result]  END

語義:

  將case后面的值value分別和每個when子句后面的值compare_value進行相等比較:

    如果一旦和某個when子句后面的值相等則返回相應(yīng)的then子句后面的值result;

    如果和所有when子句后面的值都不相等,則返回else子句后面的值;

    如果沒有else部分則返回null。

注意:

  ①value可以是字面量、表達式或者列名

  ②CASE表達式的數(shù)據(jù)類型取決于跟在then或else后面的表達式的類型

類型必須相同(可嘗試做隱式類型轉(zhuǎn)換),否則出錯

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的語法結(jié)構(gòu):

CASE

    WHEN [condition] THEN result

    [WHEN [condition] THEN result ...]

    [ELSE result]  END

語義:

  如果某個when子句后面的條件condition為true,則返回相應(yīng)的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          |
+--------+--------------+

總結(jié)

以上是生活随笔為你收集整理的Sql中的if函数学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。