一、數(shù)學函數(shù)
ABS(x)
返回x的絕對值
BIN(x)
返回x的二進制(OCT返回八進制,HEX返回十六進制)
CEILING(x)
返回大于x的最小整數(shù)值
EXP(x)
返回值e(自然對數(shù)的底)的x次方
FLOOR(x)
返回小于x的最大整數(shù)值
GREATEST(x1,x2,...,xn)
返回集合中最大的值
LEAST(x1,x2,...,xn)
返回集合中最小的值
LN(x)
返回x的自然對數(shù)
LOG(x,y)
返回x的以y為底的對數(shù)
MOD(x,y)
返回x/y的模(余數(shù))
PI()
返回pi的值(圓周率)
RAND()
返回0到1內的隨機值,可以通過提供一個參數(shù)(種子)使RAND()隨機數(shù)生成器生成一個指定的值。
ROUND(x,y)
返回參數(shù)x的四舍五入的有y位小數(shù)的值
SIGN(x)
返回代表數(shù)字x的符號的值
SQRT(x)
返回一個數(shù)的平方根
TRUNCATE(x,y)
返回數(shù)字x截短為y位小數(shù)的結果
二、聚合函數(shù)(常用于GROUP BY從句的SELECT查詢中)
AVG(col)
返回指定列的平均值
COUNT(col)
返回指定列中非NULL值的個數(shù)
MIN(col)
返回指定列的最小值
MAX(col)
返回指定列的最大值
SUM(col)
返回指定列的所有值之和
GROUP_CONCAT(col)
返回由屬于一組的列值連接組合而成的結果
三、字符串函數(shù)
ASCII(char)
返回字符的ASCII碼值
BIT_LENGTH(str)
返回字符串的比特長度
CONCAT(s1,s2...,sn)
將s1,s2...,sn連接成字符串
CONCAT_WS(sep,s1,s2...,sn)
將s1,s2...,sn連接成字符串,并用sep字符間隔
INSERT(str,x,y,instr)
將字符串str從第x位置開始,y個字符長的子串替換為字符串instr,返回結果
FIND_IN_SET(str,list)
分析逗號分隔的list列表,如果發(fā)現(xiàn)str,返回str在list中的位置
LCASE(str)或LOWER(str)
返回將字符串str中所有字符改變?yōu)樾懞蟮慕Y果
LEFT(str,x)
返回字符串str中最左邊的x個字符
LENGTH(s)
返回字符串str中的字符數(shù)
LTRIM(str)
從字符串str中切掉開頭的空格
POSITION(substr,str)
返回子串substr在字符串str中第一次出現(xiàn)的位置
QUOTE(str)
用反斜杠轉義str中的單引號
REPEAT(str,srchstr,rplcstr)
返回字符串str重復x次的結果
REVERSE(str)
返回顛倒字符串str的結果
RIGHT(str,x)
返回字符串str中最右邊的x個字符
RTRIM(str)
返回字符串str尾部的空格
STRCMP(s1,s2)
比較字符串s1和s2
TRIM(str)
去除字符串首部和尾部的所有空格
UCASE(str)
或UPPER(str)
返回將字符串str中所有字符轉變?yōu)榇髮懞蟮慕Y果
四、日期和時間函數(shù)
CURDATE()
或CURRENT_DATE()
返回當前的日期
CURTIME()
或CURRENT_TIME()
返回當前的時間
DATE_ADD(date,INTERVAL int keyword)
返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)
依照指定的fmt格式格式化日期date值
DATE_SUB(date,INTERVAL int keyword)
返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)
返回date所代表的一星期中的第幾天(1~7)
DAYOFMONTH(date)
返回date是一個月的第幾天(1~31)
DAYOFYEAR(date)
返回date是一年的第幾天(1~366)
DAYNAME(date)
返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt)
根據(jù)指定的fmt格式,格式化UNIX時間戳ts
HOUR(time)
返回time的小時值(0~23)
MINUTE(time)
返回time的分鐘值(0~59)
MONTH(date)
返回date的月份值(1~12)
MONTHNAME(date)
返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
NOW()
返回當前的日期和時間
QUARTER(date)
返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
WEEK(date)
返回日期date為一年中第幾周(0~53)
YEAR(date)
返回日期date的年份(1000~9999)
一些示例:
獲取當前系統(tǒng)時間:
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
返回兩個日期值之間的差值(月數(shù)):
SELECT PERIOD_DIFF(200302,199802);
在Mysql中計算年齡:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;
這樣,如果Brithday是未來的年月日的話,計算結果為0。
下面的SQL語句計算員工的絕對年齡,即當Birthday是未來的日期時,將得到負值。
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') -(DATE_FORMAT(NOW(), '00-%m-%d') DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee
五、加密函數(shù)
AES_ENCRYPT(str,key)
返回用密鑰key對字符串str利用高級加密標準算法加密后的結果,調用AES_ENCRYPT的結果是一個二進制字符串,以BLOB類型存儲
AES_DECRYPT(str,key)
返回用密鑰key對字符串str利用高級加密標準算法解密后的結果
DECODE(str,key)
使用key作為密鑰解密加密字符串str
ENCRYPT(str,salt)
使用UNIXcrypt()函數(shù),用關鍵詞salt(一個可以惟一確定口令的字符串,就像鑰匙一樣)加密字符串str
ENCODE(str,key)
使用key作為密鑰加密字符串str,調用ENCODE()的結果是一個二進制字符串,它以BLOB類型存儲
MD5()
計算字符串str的MD5校驗和
PASSWORD(str)
返回字符串str的加密版本,這個加密過程是不可逆轉的,和UNIX密碼加密過程使用不同的算法。
SHA()
計算字符串str的安全散列算法(SHA)校驗和
示例:
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');
六、控制流函數(shù)
MySQL有4個函數(shù)是用來進行條件操作的,這些函數(shù)可以實現(xiàn)SQL的條件邏輯,允許開發(fā)者將一些應用程序業(yè)務邏輯轉換到數(shù)據(jù)庫后臺。
MySQL控制流函數(shù):
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
這些函數(shù)的第一個是IFNULL()
,它有兩個參數(shù),并且對第一個參數(shù)進行判斷。如果第一個參數(shù)不是NULL,函數(shù)就會向調用者返回第一個參數(shù);如果是NULL,將返回第二個參數(shù)。
如:SELECT IFNULL(1,2), IFNULL(NULL,10),IFNULL(4*NULL,'false');
NULLIF()函數(shù)將會檢驗提供的兩個參數(shù)是否相等,如果相等,則返回NULL,如果不相等,就返回第一個參數(shù)。
如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);
和許多腳本語言提供的IF()
函數(shù)一樣,MySQL的IF()函數(shù)也可以建立一個簡單的條件測試,這個函數(shù)有三個參數(shù),第一個是要被判斷的表達式,如果表達式為真,IF()將會返回第二個參數(shù),如果為假,IF()將會返回第三個參數(shù)。
如:SELECTIF(110,2,3),IF(56>100,'true','false');
IF()
函數(shù)在只有兩種可能結果時才適合使用。然而,在現(xiàn)實世界中,我們可能發(fā)現(xiàn)在條件測試中會需要多個分支。在這種情況下,MySQL提供了CASE函數(shù),它和PHP及Perl語言的switch-case
條件例程一樣。
CASE函數(shù)的格式有些復雜,通常如下所示:
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
這里,第一個參數(shù)是要被判斷的值或表達式,接下來的是一系列的WHEN-THEN
塊,每一塊的第一個參數(shù)指定要比較的值,如果為真,就返回結果。所有的WHEN-THEN塊將以ELSE塊結束,當END結束了所有外部的CASE塊時,如果前面的每一個塊都不匹配就會返回ELSE塊指定的默認結果。如果沒有指定ELSE塊,而且所有的WHEN-THEN比較都不是真,MySQL將會返回NULL。
CASE函數(shù)還有另外一種句法,有時使用起來非常方便,如下:
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';#一個登陸驗證
七、格式化函數(shù)
DATE_FORMAT(date,fmt)
依照字符串fmt格式化日期date值
FORMAT(x,y)
把x格式化為以逗號隔開的數(shù)字序列,y是結果的小數(shù)位數(shù)
INET_ATON(ip)
返回IP地址的數(shù)字表示
INET_NTOA(num)
返回數(shù)字所代表的IP地址
TIME_FORMAT(time,fmt)
依照字符串fmt格式化時間time值
其中最簡單的是FORMAT()
函數(shù),它可以把大的數(shù)值格式化為以逗號間隔的易讀的序列。
示例:
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);
八、類型轉化函數(shù)
為了進行數(shù)據(jù)類型轉化,MySQL提供了CAST()
函數(shù),它可以把一個值轉化為指定的數(shù)據(jù)類型。類型有:BINARY
,CHAR
,DATE
,TIME
,DATETIME
,SIGNED
,UNSIGNED
示例:
SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);
九、系統(tǒng)信息函數(shù)
DATABASE()
返回當前數(shù)據(jù)庫名
BENCHMARK(count,expr)
將表達式expr重復運行count次
CONNECTION_ID()
返回當前客戶的連接ID
FOUND_ROWS()
返回最后一個SELECT查詢進行檢索的總行數(shù)
USER()或SYSTEM_USER()
返回當前登陸用戶名
VERSION()
返回MySQL服務器的版本
示例:
SELECT DATABASE(),VERSION(),USER();
SELECTBENCHMARK(9999999,LOG(RAND()*PI()));#該例中,MySQL計算LOG(RAND()*PI())表達式9999999次。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
您可能感興趣的文章:- mysql常用函數(shù)實例總結【聚集函數(shù)、字符串、數(shù)值、時間日期處理等】
- MySQL常用類型轉換函數(shù)總結(推薦)
- mysql中常用日期比較與計算函數(shù)
- Mysql常用運算符與函數(shù)匯總
- MySQL中的常用函數(shù)
- mysql常用日期時間/數(shù)值函數(shù)詳解(必看)
- MySQL常用時間函數(shù)詳解(推薦)
- MySQL常用聚合函數(shù)詳解
- mysql常用函數(shù)匯總(分享)
- mysql截取函數(shù)常用方法使用說明
- MySQL 常用函數(shù)總結