一、數學函數
ABS(x)
返回x的絕對值
BIN(x)
返回x的二進制(OCT返回八進制,HEX返回十六進制)
CEILING(x)
返回大于x的最小整數值
EXP(x)
返回值e(自然對數的底)的x次方
FLOOR(x)
返回小于x的最大整數值
GREATEST(x1,x2,...,xn)
返回集合中最大的值
LEAST(x1,x2,...,xn)
返回集合中最小的值
LN(x)
返回x的自然對數
LOG(x,y)
返回x的以y為底的對數
MOD(x,y)
返回x/y的模(余數)
PI()
返回pi的值(圓周率)
RAND()
返回0到1內的隨機值,可以通過提供一個參數(種子)使RAND()隨機數生成器生成一個指定的值。
ROUND(x,y)
返回參數x的四舍五入的有y位小數的值
SIGN(x)
返回代表數字x的符號的值
SQRT(x)
返回一個數的平方根
TRUNCATE(x,y)
返回數字x截短為y位小數的結果
二、聚合函數(常用于GROUP BY從句的SELECT查詢中)
AVG(col)
返回指定列的平均值
COUNT(col)
返回指定列中非NULL值的個數
MIN(col)
返回指定列的最小值
MAX(col)
返回指定列的最大值
SUM(col)
返回指定列的所有值之和
GROUP_CONCAT(col)
返回由屬于一組的列值連接組合而成的結果
三、字符串函數
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列表,如果發現str,返回str在list中的位置
LCASE(str)或LOWER(str)
返回將字符串str中所有字符改變為小寫后的結果
LEFT(str,x)
返回字符串str中最左邊的x個字符
LENGTH(s)
返回字符串str中的字符數
LTRIM(str)
從字符串str中切掉開頭的空格
POSITION(substr,str)
返回子串substr在字符串str中第一次出現的位置
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中所有字符轉變為大寫后的結果
四、日期和時間函數
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)
根據指定的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)
一些示例:
獲取當前系統時間:
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);
返回兩個日期值之間的差值(月數):
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
五、加密函數
AES_ENCRYPT(str,key)
返回用密鑰key對字符串str利用高級加密標準算法加密后的結果,調用AES_ENCRYPT的結果是一個二進制字符串,以BLOB類型存儲
AES_DECRYPT(str,key)
返回用密鑰key對字符串str利用高級加密標準算法解密后的結果
DECODE(str,key)
使用key作為密鑰解密加密字符串str
ENCRYPT(str,salt)
使用UNIXcrypt()函數,用關鍵詞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');
六、控制流函數
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(110,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';#一個登陸驗證
七、格式化函數
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);
八、類型轉化函數
為了進行數據類型轉化,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);
九、系統信息函數
DATABASE()
返回當前數據庫名
BENCHMARK(count,expr)
將表達式expr重復運行count次
CONNECTION_ID()
返回當前客戶的連接ID
FOUND_ROWS()
返回最后一個SELECT查詢進行檢索的總行數
USER()或SYSTEM_USER()
返回當前登陸用戶名
VERSION()
返回MySQL服務器的版本
示例:
SELECT DATABASE(),VERSION(),USER();
SELECTBENCHMARK(9999999,LOG(RAND()*PI()));#該例中,MySQL計算LOG(RAND()*PI())表達式9999999次。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
您可能感興趣的文章:- mysql常用函數實例總結【聚集函數、字符串、數值、時間日期處理等】
- MySQL常用類型轉換函數總結(推薦)
- mysql中常用日期比較與計算函數
- Mysql常用運算符與函數匯總
- MySQL中的常用函數
- mysql常用日期時間/數值函數詳解(必看)
- MySQL常用時間函數詳解(推薦)
- MySQL常用聚合函數詳解
- mysql常用函數匯總(分享)
- mysql截取函數常用方法使用說明
- MySQL 常用函數總結