首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 常用函數速查大全:字串、日期時間、數學、加密、聚合與資訊函數完整版

     編輯:MySQL 綜合教學

MySQL 內建函數超過百種,開發、報表、ETL 時常需現查。本文將官方文檔核心函數分類整理,附帶語法、說明與範例,方便離線速查。

一、字串函數

函數用途範例/備註
ASCII(str)回傳最左字元 ASCII 碼ASCII('A') → 65
CHAR(N,...)整數轉字元串CHAR(77,121,83,81,76) → 'MySQL'
CONCAT(str1,str2,...)串聯字串,任一 NULL 則回 NULLCONCAT('My','SQL') → 'MySQL'
CONCAT_WS(sep,str1,str2,...)帶分隔符串聯,忽略 NULLCONCAT_WS(',','a','b') → 'a,b'
LENGTH(str)位元組長度多位元組字元計多位元組
CHAR_LENGTH(str)字元長度多位元組字元計 1
LOCATE(substr,str[,pos])搜尋子串位置(1-based)LOCATE('bar','foobarbar') → 4
SUBSTRING(str,pos[,len])擷取子串,支援負位置SUBSTRING('Quadratically',5,6) → 'ratica'
SUBSTRING_INDEX(str,delim,count)依分隔符切割SUBSTRING_INDEX('a.b.c','.',2) → 'a.b'
TRIM([BOTH|LEADING|TRAILING] [remstr] FROM str)去除首尾字元TRIM('x' FROM 'xxxbarxxx') → 'bar'
REPLACE(str,from,to)替換所有匹配REPLACE('www.mysql.com','w','Ww') → 'WwWwWw.mysql.com'
UPPER/LOWER(str)大小寫轉換多位元組安全
LPAD/RPAD(str,len,padstr)左右填充LPAD('hi',4,'?') → '??hi'
REVERSE(str)反轉字串REVERSE('abc') → 'cba'
FIND_IN_SET(str,strlist)在逗號列表中尋找位置SET 欄位優化用位運算
FIELD(str,str1,str2...)回傳 str 在列表中的索引FIELD('ej','Hej','ej') → 2
ELT(N,str1,str2...)回傳第 N 個字串FIELD 反函數
MAKE_SET(bits,str1,str2...)位元組合成集合字串MAKE_SET(1|4,'a','b','c') → 'a,c'
EXPORT_SET(bits,on,off[,sep[,bits]])位元轉 on/off 字串EXPORT_SET(5,'Y','N',',',4) → 'Y,N,Y,N'

二、日期時間函數

函數用途範例/備註
NOW() / SYSDATE()當前日期時間NOW=語句開始時間,SYSDATE=即時
CURDATE() / CURTIME()當前日期/時間字串/數值語境格式不同
DATE(expr)擷取日期部份DATE('2023-01-01 12:00') → '2023-01-01'
DATE_FORMAT(date,format)格式化輸出%Y-%m-%d %H:%i:%s 等修飾符
STR_TO_DATE(str,format)字串解析為日期DATE_FORMAT 逆操作
DATE_ADD(date,INTERVAL expr unit)日期加減DATE_ADD(NOW(),INTERVAL 1 DAY)
DATEDIFF(expr1,expr2)兩日期相差天數只比較日期部份
TIMESTAMPDIFF(unit,dt1,dt2)兩 datetime 差值單位可為 SECOND/DAY/MONTH 等
UNIX_TIMESTAMP([date])轉 Unix 時間戳秒數,1970-01-01 起
FROM_UNIXTIME(ts[,format])時間戳轉日期可帶格式化
DAYOFWEEK/WEEKDAY(date)星期索引1=Sun / 0=Mon
MONTHNAME/DAYNAME(date)月/星期名稱英文
LAST_DAY(date)該月最後一天LAST_DAY('2023-02-10') → '2023-02-28'
QUARTER(date)季度 1-4
WEEK(date[,mode])周數mode 控制起始週與範圍
YEARWEEK(date[,mode])年週組合
PERIOD_ADD(P,N) / PERIOD_DIFF(P1,P2)年月期運算格式 YYYYMM
SEC_TO_TIME / TIME_TO_SEC秒↔時間互轉

三、數學函數

函數用途範例
ABS(X)絕對值ABS(-2) → 2
CEILING/FLOOR(X)向上/向下取整CEILING(2.3)→3, FLOOR(-2.3)→-3
ROUND(X[,D])四捨五入ROUND(2.432,2)→2.43, ROUND(12.432,-1)→10
TRUNCATE(X,D)截斷不捨入TRUNCATE(2.432,2)→2.43
MOD(N,M) / N % M取餘MOD(3,2)→1
POW(X,Y) / POWER(X,Y)乘冪POW(2,3)→8
SQRT(X)平方根SQRT(4)→2
RAND([N])隨機數 0-1給種子可重現序列
SIGN(X)符號 -1/0/1
TRIG 函數:SIN/COS/TAN/ASIN/ACOS/ATAN/ATAN2三角函數弧度制
DEGREES/RADIANS(X)角度↔弧度
LOG/LOG2/LOG10/LN/EXP對數/指數
PI()圓周率雙精度
CRC32(expr)循環冗餘校驗回傳 32-bit 無號整數

四、控制流程函數

CASE WHEN cond THEN val ... ELSE def END
IF(cond, true_val, false_val)
IFNULL(expr1, expr2)  -- expr1 不為 NULL 回 expr1,否則 expr2
NULLIF(expr1, expr2)  -- 相等回 NULL,否則 expr1

五、加密與雜湊函數

函數用途備註
MD5(str)128-bit 雜湊,32 位十六進制常用做摘要
SHA1/SHA2(str,256|512)SHA 雜湊SHA2 更安全
PASSWORD(str)MySQL 密碼雜湊內部認證用,不建議業務用
AES_ENCRYPT/DECRYPT(str,key)AES 加解密金鑰長度 128/256-bit
DES_ENCRYPT/DECRYPTTriple-DES需 SSL 支援
ENCODE/DECODE(str,pass)簡易加解密安全性低
ENCRYPT(str[,salt])Unix crypt()salt 至少 2 字元
OLD_PASSWORD(str)4.1 前密碼雜湊相容舊客戶端

六、資訊函數

函數用途
VERSION()Server 版本字串
CONNECTION_ID()當前連線 Thread ID
CURRENT_USER()認證用戶@主機
USER() / SESSION_USER() / SYSTEM_USER()客戶端用戶@主機
DATABASE() / SCHEMA()當前預設資料庫
FOUND_ROWS()配合 SQL_CALC_FOUND_ROWS 取總行數
LAST_INSERT_ID([expr])最後 AUTO_INCREMENT 值
ROW_COUNT()前一條 DML 影響行數
BENCHMARK(count,expr)效能測試,重複執行 expr
CHARSET/CHARSET(str)字串字符集
COLLATION(str)字串排序規則

七、聚合函數

函數用途備註
AVG/COUNT/SUM/MIN/MAX基礎聚合支援 DISTINCT
GROUP_CONCAT(expr [ORDER BY] [SEPARATOR])分組串聯預設 1024 字元,可調 group_concat_max_len
BIT_AND/OR/XOR(expr)位元聚合64-bit 精度
STD/STDDEV/STDDEV_POP/SAMP標準差
VAR_POP/VAR_SAMP/VARIANCE變異數

八、其他實用函數

  • UUID():生成 RFC 4122 UUID
  • INET_ATON/NTOA(ip):IPv4 字串↔整數
  • GET_LOCK/RELEASE_LOCK/IS_FREE_LOCK/IS_USED_LOCK(str,timeout):應用層命名鎖
  • SLEEP(sec):休眠秒數,可含微秒
  • VALUES(col):INSERT ... ON DUPLICATE KEY UPDATE 中引用插入值
  • DEFAULT(col):取欄位預設值
  • FORMAT(X,D):數字格式化 #,###.##
  • COMPRESS/UNCOMPRESS/UNCOMPRESSED_LENGTH:zlib 壓縮(需編譯支援)

使用小撇步

  1. 多位元組安全:字串函數多標註「多位元組安全」,中文環境請優先用 CHAR_LENGTH、SUBSTRING 等。
  2. 時區陷阱:NOW() 受 time_zone 影響,UTC_TIMESTAMP() 固定 UTC。
  3. 隱含轉型:數字與字串運算會自動轉型,建議顯式 CAST(... AS CHAR) 避免驚喜。
  4. 效能提醒:GROUP_CONCAT、FIND_IN_SET 大資料量時慎用;RAND() 在 ORDER BY 會全表掃描。

總結

MySQL 函數庫極豐富,熟悉分類與常用組合(如 DATE_FORMAT+STR_TO_DATE、CONCAT_WS+GROUP_CONCAT、AES_ENCRYPT+UNHEX)能大幅提升 SQL 表達力與效能。建議收藏本速查表,實戰中隨查隨用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved