MYSQL常用函數(控制流程函數)

來源:互聯網
上載者:User

標籤:應用程式   select   condition   樣本   null   mys   between   方便   語言   

MySQL有4個函數是用來進行條件操作的,這些函數可以實現SQL的條件邏輯,允許開發人員將一些應用程式商務邏輯轉換到資料庫後台。
MySQL控制流程函數:
CASE WHEN[test1] THEN [result1]...ELSE [default] END如果testN是真,則返回resultN,否則返回default
CASE [test] WHEN[val1] THEN [result]...ELSE [default]END 

 如果test和valN相等,則返回resultN,否則返回default
IF(test,t,f)   如果test是真,返回t;否則返回f
IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否則返回arg2
NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否則返回arg1
這些函數的第一個是IFNULL(),它有兩個參數,並且對第一個參數進行判斷。如果第一個參數不是NULL,函數就會向調用者返回第一個參數;如果是NULL,將返回第二個參數。
如:SELECT IFNULL(1,2), IFNULL(NULL,10),IFNULL(4*NULL,‘false‘);
NULLIF()函數將會檢驗提供的兩個參數是否相等,如果相等,則返回NULL,如果不相等,就返回第一個參數。
如:SELECT NULLIF(1,1),NULLIF(‘A‘,‘B‘),NULLIF(2+3,4+1);
和許多指令碼語言提供的IF()函數一樣,MySQL的IF()函數也可以建立一個簡單的條件測試,這個函數有三個參數,第一個是要被判斷的運算式,如果運算式為真,IF()將會返回第二個參數,如果為假,IF()將會返回第三個參數。
如:SELECTIF(1<10,2,3),IF(56>100,‘true‘,‘false‘);
IF()函數在只有兩種可能結果時才適合使用。然而,在現實世界中,我們可能發現在條件測試中會需要多個分支。在這種情況下,MySQL提供了CASE函數,它和PHP及Perl語言的switch-case條件常式一樣。
CASE函數的格式有些複雜,通常如下所示:
CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END
這裡,第一個參數是要被判斷的值或運算式,接下來的是一系列的WHEN-THEN塊,每一塊的第一個參數指定要比較的值,如果為真,就返回結果。所有的WHEN-THEN塊將以ELSE塊結束,當END結束了所有外部的CASE塊時,如果前面的每一個塊都不匹配就會返回ELSE塊指定的預設結果。如果沒有指定ELSE塊,而且所有的WHEN-THEN比較都不是真,MySQL將會返回NULL。
CASE函數還有另外一種句法,有時使用起來非常方便,如下:
CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END
這種條件下,返回的結果取決於相應的條件測試是否為真。
樣本:
mysql>SELECT CASE ‘green‘
     WHEN ‘red‘ THEN ‘stop‘
     WHEN ‘green‘ THEN ‘go‘ END;
SELECT CASE 9 WHEN 1 THEN ‘a‘ WHEN 2 THEN ‘b‘ ELSE ‘N/A‘ END;
SELECT CASE WHEN (2+2)=4 THEN ‘OK‘ WHEN(2+2)<>4 THEN ‘not OK‘ END ASSTATUS;
SELECT Name,IF((IsActive = 1),‘已啟用‘,‘未啟用‘) AS RESULT FROMUserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total,
CASE WHEN (math+sci+lit) < 50 THEN ‘D‘
WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN ‘C‘
WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN ‘B‘
ELSE ‘A‘ END
AS grade FROM marks;
SELECT IF(ENCRYPT(‘sue‘,‘ts‘)=upass,‘allow‘,‘deny‘) AS LoginResultFROM users WHERE uname = ‘sue‘;#一個登陸驗證

MYSQL常用函數(控制流程函數)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.