Mysql學習總結(5)——MySql經常使用函數大全講解

MySQL數據庫中提供了很豐富的函數。MySQL函數包括數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數、加密函數、格式化函數等。經過這些函數,能夠簡化用戶的操做。例如,字符串鏈接函數能夠很方便的將多個字符串鏈接在一塊兒。在這一講中將講解的內容包括:
數學函數
字符串函數
日期和時間函數
條件判斷函數
系統信息函數
加密函數
格式化函數
mysql

       MySQL函數是MySQL數據庫提供的內部函數。這些內部函數能夠幫助用戶更加方便的處理表中的數據。本小節中將簡單介紹MySQL中包含哪幾類函數,以及這幾類函數的的使用範圍和做用。MySQL函數包括數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數、加密函數等。SELECT語句及其條件表達式均可以使用這些函數。同時,INSERT 、UPDATE、DELECT語句及其條件表達式也可使用這些函數。例如,表中的某個數據是負數,如今須要將這個數據顯示爲正數。這就可使用絕對值函數。從上面能夠知道,MySQL函數能夠對錶中數據進行相應的處理,以便獲得用戶但願獲得的數據。這些函數可使MySQL數據庫的功能更增強大。sql

1、數學函數

數學函數是MySQL中經常使用的一類函數。主要用於處理數字,包括整型、浮點數等。數學函數包括絕對值函數、正弦函數、餘弦函數、獲取隨機數的函數等。數據庫

ABS(X):返回X的絕對值
select ABS(-32); 服務器

MOD(N,M)或%:返回N被M除的餘數。 
select MOD(15,7); 
select 15 % 7; 

FLOOR(X):返回不大於X的最大整數值。 
select FLOOR(1.23); 
select FLOOR(-1.23); 

  
CEILING(X):返回不小於X的最小整數值。 
select CEILING(1.23); 
select CEILING(-1.23); 

ROUND(X) :返回參數X的四捨五入的一個整數。 
select ROUND(1.58); 
select ROUND(-1.58); 


2、字符串函數

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); 編碼

LENGTH(str):返回字符串str的長度。
select LENGTH('text'); 


LOCATE(substr,str):返回子串substr在字符串str第一個出現的位置,若是substr不是在str裏面,返回0. 
select LOCATE('bar', 'foobarbar'); 
select LOCATE('xbar', 'foobar'); 加密

INSTR(str,substr):返回子串substr在字符串str中的第一個出現的位置。
select INSTR('foobarbar', 'bar'); 
select INSTR('xbar', 'foobar'); 


LEFT(str,len):返回字符串str的最左面len個字符。
select LEFT('foobarbar', 5); spa

RIGHT(str,len):返回字符串str的最右面len個字符。 
select RIGHT('foobarbar', 4); 


SUBSTRING(str,pos):從字符串str的起始位置pos返回一個子串。 
select SUBSTRING('Quadratically',5);.net

TRIM(str):返回字符串str,全部前綴或後綴被刪除了。
select TRIM(' bar ');   


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'); 

REPEAT(str,count):返回由重複countTimes次的字符串str組成的一個字符串。若是count <= 0,返回一個空字符串。若是str或count是NULL,返回NULL。 
select REPEAT('MySQL', 3); 


REVERSE(str):返回顛倒字符順序的字符串str。 
select REVERSE('abc');

INSERT(str,pos,len,newstr):返回字符串str,在位置pos起始的子串且len個字符長的子串由字符串newstr代替。 
select INSERT(‘whatareyou', 5, 3, ‘is'); 

  

3、日期和時間函數 

DAYOFWEEK(date):返回日期date的星期索引(1=星期天,2=星期一, …7=星期六)。
select DAYOFWEEK('1998-02-03'); 
select DAYOFWEEK(now()); 

WEEKDAY(date):返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
select WEEKDAY('1997-11-05'); 

DAYOFMONTH(date):返回date的月份中的日期,在1到31範圍內。 
select DAYOFMONTH('1998-02-03'); 

DAYOFYEAR(date):返回date在一年中的日數, 在1到366範圍內。 
select DAYOFYEAR('1998-02-03'); 

MONTH(date):返回date的月份,範圍1到12。 
select MONTH('1998-02-03'); 

DAYNAME(date):返回date的星期名字。 
select DAYNAME("1998-02-05"); 

MONTHNAME(date) :返回date的月份名字。 
select MONTHNAME("1998-02-05"); 


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'); 

HOUR(time):返回time的小時,範圍是0到23。
select HOUR('10:05:03'); 

MINUTE(time):返回time的分鐘,範圍是0到59。 
select MINUTE('98-02-03 10:05:03'); 

SECOND(time):回來time的秒數,範圍是0到59。 
select SECOND('10:05:03'); 

  
DATE_ADD(date,INTERVAL expr type) ,進行日期增長的操做,能夠精確到秒
DATE_SUB(date,INTERVAL expr type) ,進行日期減小的操做,能夠精確到秒

SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; 

SELECT INTERVAL 1 DAY + "1997-12-31"; 
SELECT "1998-01-01" - INTERVAL 1 SECOND; 
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND); 
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); 

SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); 
SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); 

CURRENT_DATE:以‘YYYY-MM-DD’或YYYYMMDD格式返回今天日期值,取決於函數在一個字符串仍是數字上下文被使用。
select CURDATE(); 

CURRENT_TIME:以‘HH:MM:SS’或HHMMSS格式返回當前時間值
select CURTIME(); 

NOW():以‘YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS格式返回當前的日期和時間 
select NOW(); 


4、控制流程函數  

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。
SELECT CASE 11 WHEN 1 THEN 'one'
WHEN 2 THEN 'two' ELSE 'more' END;
SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;

SELECT CASE BINARY 'B'
WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;


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(str1,str2):若是str1>str2返回1,str1=str2反回0,str1<str2返回-1)

STRCMP(expr1,expr2) 

若是字符串相同,STRCMP()返回0,若是第一參數根據當前的排序次序小於第二個,返回-1,不然返回1。
select STRCMP('text', 'text2'); 
select STRCMP('text2', 'text'); 
select STRCMP('text', 'text');


  5、系統信息函數

系統信息函數用來查詢MySQL數據庫的系統信息。例如,查詢數據庫的版本,查詢數據庫的當前用戶等。本小節將詳細講解系統信息函數的做用和使用方法。

獲取MySQL版本號、鏈接數、數據庫名的函數

VERSION()函數返回數據庫的版本號;


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值。


6、加密函數

加密函數是MySQL中用來對數據進行加密的函數。由於數據庫中有些很敏感的信息不但願被其餘人看到,就應該經過加密方式來使這些數據變成看似亂碼的數據。例如用戶的密碼,就應該通過加密。本小節將詳細講解加密函數的做用和使用方法。
下面是各類加密函數的名稱、做用和使用方法。

加密函數PASSWORD(str)
PASSWORD(str)函數能夠對字符串str進行加密。通常狀況下,PASSWORD(str)函數主要是用來給用戶的密碼加密的。下面使用PASSWORD(str)函數爲字符串「abcd」加密。

加密函數MD5(str)

MD5(str)函數能夠對字符串str進行加密。MD5(str)函數主要對普通的數據進行加密。下面使用MD5(str)函數爲字符串「abcd」加密。


加密函數ENCODE(str,pswd_str)
ENCODE(str,pswd_str)函數可使用字符串pswd_str來加密字符串str。加密的結果是一個二進制數,必須使用BLOB類型的字段來保存它。
解密函數
DECODE(crypt_str,pswd_str)函數可使用字符串pswd_str來爲crypt_str解密。crypt_str是經過ENCODE(str,pswd_str)加密後的二進制數據。字符串pswd_str應該與加密時的字符串pswd_str是相同的。下面使用DECODE(crypt_str,pswd_str)爲ENCODE(str,pswd_str)加密的數據解密。

7、其它函數

格式化函數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進制數。

和下面的

IP地址與數字相互轉換的函數

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這些類型起做用。但兩種方法只是改變了輸出值的數據類型,並無改變表中字段的類型。

相關文章
相關標籤/搜索