標籤:序列 登陸驗證 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中常用的控制流程函數