mysql中常用的控制流程函數

來源:互聯網
上載者:User

標籤:序列   登陸驗證   0.12   not   form   users   適合   字串   世界   

MySQL有4個函數是用來進行條件操作的,這些函數可以實現SQL的條件邏輯,允許開發人員將一些應用程式商務邏輯轉換到資料庫後台。
MySQL控制流程函數: CASE WHEN[test1] THEN [result1]...ELSE [default] END如果testN是真,則返回resultN,否則返回defaultCASE [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‘ ENDAS grade FROM marks;SELECT IF(ENCRYPT(‘sue‘,‘ts‘)=upass,‘allow‘,‘deny‘) AS LoginResultFROM users WHERE uname = ‘sue‘;#一個登陸驗證七、格式化函數 DATE_FORMAT(date,fmt)  依照字串fmt格式化日期date值FORMAT(x,y)   把x格式化為以逗號隔開的數字序列,y是結果的小數位元INET_ATON(ip)   返回IP地址的數字表示INET_NTOA(num)   返回數字所代表的IP地址TIME_FORMAT(time,fmt)  依照字串fmt格式化時間time值其中最簡單的是FORMAT()函數,它可以把大的數值格式化為以逗號間隔的易讀的序列。樣本:複製代碼 代碼如下:SELECT FORMAT(34234.34323432,3);SELECT DATE_FORMAT(NOW(),‘%W,%D %M %Y %r‘);SELECT DATE_FORMAT(NOW(),‘%Y-%m-%d‘);SELECT DATE_FORMAT(19990330,‘%Y-%m-%d‘);SELECT DATE_FORMAT(NOW(),‘%h:%i %p‘);SELECT INET_ATON(‘10.122.89.47‘);SELECT INET_NTOA(175790383);a) CASE WHEN THEN 函數 
  文法:
       CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ……] [ELSE result ]  END 
       CASE WHEN [condition] THEN result [WHEN[condition] THEN result ……] [ELSE result] END ; 
  函數用法說明:在第一個方案的返回結果中, value =compare-value 。而第二個方案的返回結果是第一種情況的真實結果。如果沒有匹配的結果值,則返回結果為 ELSE 後的結果,如果沒有 ELSE 部分,則傳回值為 NULL 
b) IF 函數用法 
  文法: IF(expr1,expr2,expr3) 
  函數用法說明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,則 IF() 的傳回值為 expr2 ; 否則傳回值則為 expr3 。 IF() 的傳回值為數字值或字串值,具體情況視其所在語境而定 
SELECT IF(1>2,2,3)c) IFNULL 函數 
  文法: IFNULL(expr1,expr2) 
  函數用法說明:假如 expr1 不為 NULL ,則 IFNULL() 的傳回值為 expr1 ; 否則其傳回值為 expr2 。 IFNULL() 的傳回值是數字或是字串,具體情況取決於其所使用的語境
SELECT IFNULL(1,2),IFNULL(NULL,10)

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.