MySQL數據庫中提供了很豐富的函數。MySQL函數包括數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數、加密函數、格式化函數等。經過這些函數,能夠簡化用戶的操做。例如,字符串鏈接函數能夠很方便的將多個字符串鏈接在一塊兒。在這一講中將講解的內容包括:
數學函數
字符串函數
日期和時間函數
條件判斷函數
系統信息函數
加密函數
格式化函數mysql
MySQL函數是MySQL數據庫提供的內部函數。這些內部函數能夠幫助用戶更加方便的處理表中的數據。本小節中將簡單介紹MySQL中包含哪幾類函數,以及這幾類函數的的使用範圍和做用。MySQL函數包括數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數、加密函數等。SELECT語句及其條件表達式均可以使用這些函數。同時,INSERT 、UPDATE、DELECT語句及其條件表達式也可使用這些函數。例如,表中的某個數據是負數,如今須要將這個數據顯示爲正數。這就可使用絕對值函數。從上面能夠知道,MySQL函數能夠對錶中數據進行相應的處理,以便獲得用戶但願獲得的數據。這些函數可使MySQL數據庫的功能更增強大。sql
數學函數是MySQL中經常使用的一類函數。主要用於處理數字,包括整型、浮點數等。數學函數包括絕對值函數、正弦函數、餘弦函數、獲取隨機數的函數等。數據庫
ABS(X):返回X的絕對值
select ABS(-32); 服務器
ASCII(str):返回字符串str的最左面字符的ASCII代碼值。若是str是空字符串,返回0。若是str是NULL,返回NULL。
select ASCII('2');
select ASCII(2);
select ASCII('dx') 函數
CONCAT(str1,str2,...):返回來自於參數連結的字符串。若是任何參數是NULL,返回NULL。能夠有超過2個的參數。一個數字參數被變換爲等價的字符串形式。
select CONCAT('My', 'S', 'QL');
select CONCAT('My', NULL, 'QL');
select CONCAT(14.3); 編碼
LOCATE(substr,str):返回子串substr在字符串str第一個出現的位置,若是substr不是在str裏面,返回0.
select LOCATE('bar', 'foobarbar');
select LOCATE('xbar', 'foobar'); 加密
LEFT(str,len):返回字符串str的最左面len個字符。
select LEFT('foobarbar', 5); spa
SUBSTRING(str,pos):從字符串str的起始位置pos返回一個子串。
select SUBSTRING('Quadratically',5);.net
LTRIM(str):返回刪除了其前置空格字符的字符串str。
select LTRIM(' barbar'); 排序
RTRIM(str):返回刪除了其拖後空格字符的字符串str。
select RTRIM(‘barbar ’);
REPLACE(str,from_str,to_str):返回字符串str,其字符串from_str的全部出現由字符串to_str代替。
select REPLACE('www.mysql.com', 'w', 'Ww');
REVERSE(str):返回顛倒字符順序的字符串str。
select REVERSE('abc');
DAYOFWEEK(date):返回日期date的星期索引(1=星期天,2=星期一, …7=星期六)。
select DAYOFWEEK('1998-02-03');
select DAYOFWEEK(now());
QUARTER(date):返回date一年中的季度,範圍1到4。
select QUARTER('98-04-01');
WEEK(date,first):對於星期天是一週的第一天的地方,有一個單個參數,返回date的週數,範圍在0到52。2個參數形式WEEK()容許你指定星期是否開始於星期天或星期一。若是第二個參數是0,星期從星期天開始,若是第二個參數是1,從星期一開始。
select WEEK('2009-02-20');
select WEEK('2009-02-20',0);
select WEEK('2009-02-20',1);
YEAR(date):返回date的年份,範圍在1000到9999。
select YEAR('98-02-03');
SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
IF(expr1,expr2,expr3)
若是 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),則 IF()的返回值爲expr2; 不然返回值則爲 expr3。IF() 的返回值爲數字值或字符串值,具體狀況視其所在語境而定。
SELECT IF(1>2,2,3);
SELECT IF(1<2,'yes ','no');
SELECT IF(STRCMP('test','test1'),'no','yes');
STRCMP(expr1,expr2)
若是字符串相同,STRCMP()返回0,若是第一參數根據當前的排序次序小於第二個,返回-1,不然返回1。
select STRCMP('text', 'text2');
select STRCMP('text2', 'text');
select STRCMP('text', 'text');
CONNECTION_ID()函數返回服務器的鏈接數,也就是到如今爲止MySQL服務的鏈接次數;
DATABASE()和SCHEMA()返回當前數據庫名。
獲取用戶名的函數
USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()和CURRENT_USER這幾個函數能夠返回當前用戶的名稱。
獲取字符串的字符集和排序方式的函數
CHARSET(str)函數返回字符串str的字符集,通常狀況這個字符集就是系統的默認字符集;COLLATION(str)函數返回字符串str的字符排列方式。
獲取最後一個自動生成的ID值的函數
LAST_INSERT_ID()函數返回最後生成的AUTO_INCREMENT值。
加密函數是MySQL中用來對數據進行加密的函數。由於數據庫中有些很敏感的信息不但願被其餘人看到,就應該經過加密方式來使這些數據變成看似亂碼的數據。例如用戶的密碼,就應該通過加密。本小節將詳細講解加密函數的做用和使用方法。
下面是各類加密函數的名稱、做用和使用方法。
加密函數PASSWORD(str)
PASSWORD(str)函數能夠對字符串str進行加密。通常狀況下,PASSWORD(str)函數主要是用來給用戶的密碼加密的。下面使用PASSWORD(str)函數爲字符串「abcd」加密。
MD5(str)函數能夠對字符串str進行加密。MD5(str)函數主要對普通的數據進行加密。下面使用MD5(str)函數爲字符串「abcd」加密。
格式化函數FORMAT(x,n)
FORMAT(x,n)函數能夠將數字x進行格式化,將x保留到小數點後n位。這個過程須要進行四捨五入。例如FORMAT(2.356,2)返回的結果將會是2.36;FORMAT(2.353,2)返回的結果將會是2.35。下面使用FORMAT(x,n)函數來說235.3456和235.3454進行格式化,都保留到小數點後3位。
ASCII(s)返回字符串s的第一個字符的ASCII碼;BIN(x)返回x的二進制編碼;HEX(x)返回x的十六進制編碼;OCT(x)返回x的八進制編碼;CONV(x,f1,f2)將x從f1進制數變成f2進制數。
INET_ATON(IP)函數能夠將IP地址轉換爲數字表示;INET_NTOA(n)函數能夠將數字n轉換成IP的形式。其中,INET_ATON(IP)函數中IP值須要加上引號。這兩個函數互爲反函數。
加鎖函數和解鎖函數
GET_LOCT(name,time)函數定義一個名稱爲nam、持續時間長度爲time秒的鎖。若是鎖定成功,返回1;若是嘗試超時,返回0;若是遇到錯誤,返回NULL。RELEASE_LOCK(name)函數解除名稱爲name的鎖。若是解鎖成功,返回1;若是嘗試超時,返回0;若是解鎖失敗,返回NULL;IS_FREE_LOCK(name)函數判斷是否使用名爲name的鎖。若是使用,返回0;不然,返回1。
重複執行指定操做的函數
BENCHMARK(count,expr)函數將表達式expr重複執行count次,而後返回執行時間。該函數能夠用來判斷MySQL處理表達式的速度。
改變字符集的函數
CONVERT(s USING cs)函數將字符串s的字符集變成cs
CAST(x AS type)和CONVERT(x,type)這兩個函數將x變成type類型。這兩個函數只對BINARY、CHAR、DATE、DATETIME、TIME、SIGNED INTEGER、UNSIGNED INTEGER這些類型起做用。但兩種方法只是改變了輸出值的數據類型,並無改變表中字段的類型。