MySQL函數(shù)

數(shù)學(xué)函數(shù)

MySQL Math函數(shù)及其描述如下:

名稱 描述
ABS(n) 返回?cái)?shù)字n的絕對值
CEIL(n) 向上取整,即返回大于或等于輸入數(shù)字(n)的最小整數(shù)值
FLOOR(x) 向下取整,即返回取不大于x的最大整數(shù)
MOD(n,m) 返回n 除以 m 的余數(shù)
ROUND(n) 將數(shù)字四舍五入到指定的小數(shù)位數(shù)
TRUNCATE(x,y) 返回?cái)?shù)字x截短為y位小數(shù)的結(jié)果
ACOS(n) 返回n的反余弦值;如果n不在-1和1范圍內(nèi),則返回null
ASIN(n) 返回n的反正弦值,n是正弦值為n的值。如果n不在-1到1的范圍內(nèi),則返回null
ATAN(n) 返回n的反正切
ATAN2(n,m),ATAN(m,n) 返回兩個(gè)變量n和m的反正切
CONV(n,from_base,to_base) 在不同的數(shù)字基數(shù)之間轉(zhuǎn)換數(shù)字
COS(n) 返回n的余弦,其中n以弧度為單位
COT(n) 返回n的余切
CRC32(n) 計(jì)算循環(huán)冗余校驗(yàn)值并返回32位無符號值
DEGREES(n) 將弧度轉(zhuǎn)換為參數(shù)n的度
EXP(n) 此函數(shù)返回e(自然對數(shù)的底)到n次方的值
LN(n) 返回n的自然對數(shù)
LOG(m,n) / log(n) 返回單個(gè)參數(shù)版本將返回X的自然對數(shù),如果調(diào)用兩個(gè)參數(shù),它返回以m為底n的對數(shù)
LOG10(n) 返回參數(shù)n的以10為底的對數(shù)
LOG2(n) 返回參數(shù)n的以2為底的對數(shù)
PI() 返回PI的值
POW(x,y) 函數(shù)用于計(jì)算 x 的 y 次方
POWER(x,y) 返回函數(shù)用于計(jì)算 x 的 y 次方
RADIANS(n) 返回參數(shù)轉(zhuǎn)換為弧度
RAND() 返回一個(gè)隨機(jī)浮點(diǎn)值
SIGN(n) 根據(jù)n是負(fù)數(shù),零還是正數(shù),返回可以為-1、0或1的n的符號
SIN(n) 返回n的正弦
SQRT(n) 返回n的平方根
tan(n) 返回n的切線

聚合函數(shù)

聚合函數(shù)對多個(gè)值執(zhí)行計(jì)算并返回單個(gè)值。

例如,可以使用AVG()采用多個(gè)數(shù)字并返回?cái)?shù)字平均值的合計(jì)函數(shù)。

下面說明了聚合函數(shù)的語法:

function_name(DISTINCT | ALL expression)

使用以下語法:

  • 首先,指定聚合函數(shù)的名稱,例如AVG()。請參閱以下部分中的聚合函數(shù)列表。
  • 其次,如果要基于不同的值進(jìn)行計(jì)算前面加DISTINCT,或者ALL要計(jì)算所有值(包括重復(fù)項(xiàng))。默認(rèn)值為ALL。
  • 第三,expression可以是列的表達(dá)式,也可以是涉及列和算術(shù)運(yùn)算符的表達(dá)式。

聚合函數(shù)通常與GROUP BY子句一起使用,來計(jì)算每個(gè)組的聚合值,例如,可以按組的計(jì)算平均值或每個(gè)組中值的總和。

MySQL支持以下聚合函數(shù):

匯總功能 描述
AVG() 返回非空值的平均值
BIT_AND() 按位返回AND
BIT_OR() 按位返回OR
BIT_XOR() 返回按位異或
COUNT() 返回組中的行數(shù),包括具有NULL值的行
GROUP_CONCAT() 返回一個(gè)串聯(lián)的字符串
JSON_ARRAYAGG() 將結(jié)果集作為單個(gè)JSON數(shù)組返回
JSON_OBJECTAGG() 返回結(jié)果集作為單個(gè)JSON對象
MAX() 返回一組非NULL值中的最大值(最大值)
MIN() 返回一組非NULL值中的最小值(最小值)
STDEV() 返回總體標(biāo)準(zhǔn)偏差
STDDEV_POP() 返回總體標(biāo)準(zhǔn)偏差
STDDEV_SAMP() 返回樣品標(biāo)準(zhǔn)偏差
SUM() 返回一組所有非NULL值的總和
VAR_POP() 返回總體標(biāo)準(zhǔn)方差
VARP_SAM() 返回樣本方差
VARIANCE() 返回總體標(biāo)準(zhǔn)方差

這里以AVG舉例,其他函數(shù)類似。

AVG()函數(shù)計(jì)算一組值的平均值。它在計(jì)算中會忽略NULL。

AVG(expression)

例如,可以使用此AVG函數(shù)products通過使用以下查詢來計(jì)算表中所有產(chǎn)品的平均購買價(jià)格:

SELECT 
    AVG(buyPrice) average_buy_price
FROM 
    products;

以下示例使用該AVG()函數(shù)來計(jì)算每個(gè)產(chǎn)品線的平均購買價(jià)格:

SELECT 
    productLine, 
    AVG(buyPrice)
FROM
    products
GROUP BY productLine
ORDER BY productLine;

字符串函數(shù)

名稱 描述
CONCAT 將兩個(gè)或多個(gè)字符串連接成一個(gè)字符串
INSTR 返回子字符串在字符串中首次出現(xiàn)的位置
LENGTH 獲取字符串的長度(以字節(jié)和字符為單位)
LOWER 將字符串轉(zhuǎn)換為小寫
UPPER 將字符串轉(zhuǎn)換為大寫
REPLACE 搜索并替換字符串中的子字符串
LEFT 從字符串中獲取指定數(shù)量的最左邊字符
RIGHT 從字符串中獲取指定數(shù)量的最右邊的字符
TRIM 從字符串中刪除不需要的字符
RTRIM 從字符串中刪除所有尾隨空格
LTRIM 從字符串中刪除所有前導(dǎo)空格
SUBSTRING 從具有特定長度的位置開始提取子字符串。
SUBSTRING_INDEX 在指定的定界符出現(xiàn)之前從字符串中返回一個(gè)子字符串
FIND_IN_SET 在以逗號分隔的字符串列表中查找字符串
FORMAT 格式化具有特定語言環(huán)境的數(shù)字,四舍五入到小數(shù)位數(shù)

日期和時(shí)間函數(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)行格式化) SELECT DATE_ADD ( CURRENT_DATE ,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt) 依照指定的fmt格式格式化日期date值 計(jì)算年齡:SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;
DATE_SUB(date,INTERVAL int keyword) 返回日期date加上間隔時(shí)間int的結(jié)果(int必須按照關(guān)鍵字進(jìn)行格化) SELECT DATE_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 SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
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)

控制流函數(shù)

控制流函數(shù)是用來進(jìn)行條件操作的,這些函數(shù)可以實(shí)現(xiàn)SQL的條件邏輯,允許開發(fā)者將一些應(yīng)用程序業(yè)務(wù)邏輯轉(zhuǎn)換到數(shù)據(jù)庫后臺。

MySQL控制流函數(shù):

格式 描述 示例
CASE WHEN [conditional test 1] THEN [result 1] WHEN [conditional test 2] THEN [result 2] ELSE [default result] END 如果testN是真,則返回resultN,否則返回default
CASE [test] WHEN[val1] THEN [result]...ELSE [default]END 如果test和valN相等,則返回resultN,否則返回default
IF(test,t,f) 如果test是真,返回t;否則返回f SELECT IF( 1<10,2,3 ) , IF(56>100, 'true', 'false' );
IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否則返回arg2 SELECT IFNULL(1,2), IFNULL(NULL,10) ,IFNULL(4*NULL,'false');
NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否則返回arg1 SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);

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

CASE函數(shù)還有另外一種句法,有時(shí)使用起來非常方便,如下:

CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END

格式化函數(shù)

函數(shù)名稱 描述說明
DATE_FORMAT(date,fmt) 依照字符串fmt格式化日期date值
FORMAT(x,y) 把x格式化為以逗號隔開的數(shù)字序列,y是結(jié)果的小數(shù)位數(shù)
INET_ATON(ip) 返回IP地址的數(shù)字表示
INET_NTOA(num) 返回?cái)?shù)字所代表的IP地址
TIME_FORMAT(time,fmt) 依照字符串fmt格式化時(shí)間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);

類型轉(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);

其他函數(shù)

函數(shù)名稱 描述說明 示例
DATABASE() 返回當(dāng)前數(shù)據(jù)庫名 SELECT DATABASE(),VERSION(),USER();
BENCHMARK(count,expr) 將表達(dá)式expr重復(fù)運(yùn)行count次 SELECT BENCHMARK(9999999,LOG(RAND()PI()));#該例中,計(jì)算LOG(RAND()PI())表達(dá)式9999999次
CONNECTION_ID() 返回當(dāng)前客戶的連接ID SELECT CONNECTION_ID();
FOUND_ROWS() 返回最后一個(gè)SELECT查詢進(jìn)行檢索的總行數(shù) SELECT FOUND_ROWS();
USER()或SYSTEM_USER() 返回當(dāng)前登陸用戶名 SELECT USER();
VERSION() 返回MySQL服務(wù)器的版本 SELECT VERSION();
AES_ENCRYPT(str,key) 返回用密鑰key對字符串str利用高級加密標(biāo)準(zhǔn)算法加密后的結(jié)果,調(diào)用AES_ENCRYPT的結(jié)果是一個(gè)二進(jìn)制字符串,以BLOB類型存儲 SELECT AES_ENCRYPT('root','key');
AES_DECRYPT(str,key) 返回用密鑰key對字符串str利用高級加密標(biāo)準(zhǔn)算法解密后的結(jié)果 SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
DECODE(str,key) 使用key作為密鑰解密加密字符串str SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
ENCRYPT(str,salt) 使用UNIXcrypt()函數(shù),用關(guān)鍵詞salt(一個(gè)可以惟一確定口令的字符串,就像鑰匙一樣)加密字符串str SELECT ENCRYPT('root','salt');
ENCODE(str,key) 返回編碼后結(jié)果 SELECT ENCODE('xufeng','key');
MD5() 計(jì)算字符串str的MD5校驗(yàn)和 SELECT MD5('123456');
PASSWORD(str) 返回字符串str的加密版本,這個(gè)加密過程是不可逆轉(zhuǎn)的,和UNIX密碼加密過程使用不同的算法。 PASSWORDSHA('123456');
SHA() 計(jì)算字符串str的安全散列算法(SHA)校驗(yàn)和 SELECT SHA('123456');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容