MySQL資料庫 第十六章 sql高階函式

2021-10-04 12:05:56 字數 3564 閱讀 8248

我最常用的乙個函式是find_in_set逗號分隔的list列表

一、數學函式

二、聚合函式(常用於group by從句的select查詢中)

三、字串函式

四、日期和時間函式

示例:select encrypt('root','salt');

select encode('xufeng','key');

select decode(encode('xufeng','key'),'key');#加解密放在一起

select aes_encrypt('root','key');

select aes_decrypt(aes_encrypt('root','key'),'key');

select md5('123456');

select sha('123456');

六、控制流函式

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';#乙個登陸驗證

七、格式化函式

其中最簡單的是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);

八、型別轉化函式

為了進行資料型別轉化,mysql提供了cast()函式,它可以把乙個值轉化為指定的資料型別。型別有:binary,char,date,time,datetime,signed,unsigned

示例:select cast(now() as signed integer),curdate()+0;

select 'f'=binary 'f','f'=cast('f' as binary);

九、系統資訊函式

示例:select database(),version(),user();

selectbenchmark(9999999,log(rand()*pi()));#該例中,mysql計算log(rand()*pi())表示式9999999次。

第十六章 tcp wrappers

在伺服器向外提供的tcp服務上包裝一層安全檢測機制。外來連線請求首先通過這個安全檢測,獲得安全認證後才可被系統服務接受。hosts.allow hosts.deny 在配置檔案中為各服務分別定義訪問控制規則實現訪問控制,檔案中的規則是即時生效的。配置檔案語法 1 daemon list client...

第十六章 資料繫結(二)

雖然大多數資料繫結都是在xaml中定義的,但您應該知道如何在 中執行乙個。這是在 中設定資料繫結的一種方式 但不是唯一的方法 bindingcontext屬性由bindableobject定義。它是bindableobject定義的唯一屬性。setbinding方法也由bindableobject定...

第十六章 資料繫結(六)

binding類定義了乙個名為path的屬性,用於設定源屬性名稱。但為什麼它被稱為path?為什麼不叫財產?path屬性被稱為它所呼叫的屬性,因為它不需要是乙個屬性。它可以是一組屬性,子屬性,甚至是與句點相關聯的索引器。以這種方式使用path可能很棘手,所以這裡有乙個名為bindingpathdem...