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