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

MySQL 函數大全:數學、聚合、字符串、日期、加密、流程控制、格式化、類型轉換、系統信息九大類實戰速查

     編輯:MySQL 綜合教學

函數分類導航

MySQL 內置函數超過 200 個,按功能域歸類為九大類,掌握核心高頻函數可顯著提升 SQL 表達力與性能。

1. 數學函數

函數功能示例與結果
GREATEST/LEAST最大/最小值GREATEST(10,9,128,1)=128
FLOOR/CEILING向下/向上取整FLOOR(-1.2)=-2, CEILING(-1.2)=-1
ROUND/TRUNCATE四捨五入/截斷ROUND(25.501)=26, TRUNCATE(1.54578,2)=1.54
ABS/SIGN絕對值/符號SIGN(-2)=-1
SQRT/POW平方根/冪運算POW(2,2)=4, POW(10,-2)=0.01
SIN/COS/TAN/ASIN/ACOS/ATAN三角函數 (弧度制)配合 RADIANS()/DEGREES() 角度轉換
BIN/OCT/HEX進制轉字符串HEX(255)='FF'

注意: 函數名與括號間不能有空格,否則報錯;錯誤參數返回 NULL。

2. 聚合函數

  • COUNT/SUM/AVG/MIN/MAX:基礎聚合,配合 GROUP BY 分組統計。
  • GROUP_CONCAT(DISTINCT col ORDER BY col SEPARATOR ';'):行轉列神器,默認 1024 字節上限,可調 group_concat_max_len。
  • STDDEV/VARIANCE:統計分析輔助。

3. 字符串函數 (高頻)

函數核心用法典型場景
ASCII/CHAR字符與碼值互轉字符編碼檢查
LEFT/RIGHT/SUBSTRING定長/定位截取手機號掩碼 CONCAT(LEFT(phone,3),'****',RIGHT(phone,4))
TRIM/LTRIM/RTRIM去首尾/左/右空格數據清洗 ETL
LPAD/RPAD左/右填充至指定長流水號補零 LPAD(id,8,'0')
REPLACE全量替換子串敏感詞過濾、路徑分隔符統一
CONCAT/CONCAT_WS拼接 (WS 帶分隔符)生成全名、拼接查詢條件
STRCMP字典序比較排序邏輯判斷

4. 日期時間函數

  • 當前值:NOW() (日期時間)、CURDATE()、CURTIME()。
  • 分量提取:YEAR/MONTH/DAY/HOUR/MINUTE/SECOND、MONTHNAME/DAYNAME、WEEK/YEARWEEK、DAYOFWEEK/DAYOFMONTH/DAYOFYEAR。
  • 運算:DATE_ADD(date, INTERVAL 1 MONTH)、DATE_SUB、DATEDIFF、TIMESTAMPDIFF(UNIT, dt1, dt2) (精確單位差)。
  • 格式化:DATE_FORMAT(dt, '%Y-%m-%d %H:%i:%S')、TIME_FORMAT,區分大小寫,格式符見文檔。

5. 加密函數

函數算法/特點適用場景
AES_ENCRYPT/AES_DECRYPTAES 對稱加密,輸出 BLOB敏感字段加密存儲 (需密鑰管理)
ENCODE/DECODE弱加密,MySQL 8.0 棄用不推薦新項目使用
ENCRYPTUnix crypt(),Windows 不支援舊系統兼容
PASSWORDMySQL 內部認證專用,不可逆僅用於 mysql.user 表
MD5/SHA1/SHA2哈希摘要,無解密密碼存儲 (建議加鹽)、文件校驗

6. 流程控制函數 (SQL 中實現邏輯判斷)

  • IFNULL(expr1, expr2):expr1 為 NULL 返回 expr2,常用於空值默認值。
  • NULLIF(expr1, expr2):相等返回 NULL,否則返回 expr1,用於避免除零 10/NULLIF(cnt,0)。
  • IF(cond, true_val, false_val):三元運算,IF(score>=60,'及格','不及格')。
  • CASE WHEN ... THEN ... ELSE ... END:多條件分支,可嵌套,支援搜索條件與簡單值兩種語法。

7. 格式化函數

  • FORMAT(num, decimals):千分位逗號 + 固定小數位,FORMAT(12345.6,2)='12,345.60'。
  • DATE_FORMAT/TIME_FORMAT:見日期函數。
  • INET_ATON('192.168.1.1')=3232235777、INET_NTOA(3232235777)='192.168.1.1':IP 與整數互轉,利於範圍查詢與索引。

8. 類型轉換函數

  • CAST(expr AS TYPE)、CONVERT(expr, TYPE):目標類型 BINARY/CHAR/DATE/TIME/DATETIME/SIGNED/UNSIGNED。
  • 隱式轉換:數值上下文自動將字符串轉數字 '99'+1=100;比較上下文字符串轉數字 5='5ab' → TRUE (警告)。
  • BINARY 'str' 或 CAST('str' AS BINARY):開啟二進制比較,區分大小寫。
  • CAST(CURDATE() AS SIGNED):日期轉數值 20240120。

9. 系統信息函數

函數返回值典型用途
DATABASE()當前默認庫多租戶 Schema 校驗
USER()/CURRENT_USER()登入用戶/認證用戶審計觸發器記錄操作者
VERSION()服務器版本兼容性判斷
CONNECTION_ID()線程 ID關聯 SHOW PROCESSLIST 排查
LAST_INSERT_ID()自增 ID主從同步、批量插入獲取 ID
FOUND_ROWS()無 LIMIT 總行數分頁查詢優化,配合 SQL_CALC_FOUND_ROWS
BENCHMARK(n, expr)0 (耗時見客戶端)表達式性能基準測試
GET_LOCK/RELEASE_LOCK/IS_FREE_LOCK命名鎖操作分布式應用層鎖協調
MASTER_POS_WAIT(log, pos, timeout)主從同步等待半同步複制應用層確認

性能與避坑提示

  1. WHERE 子句對列使用函數導致索引失效:WHERE DATE(created_at)='2024-01-20' → 改為 WHERE created_at >= '2024-01-20' AND created_at < '2024-01-21'。
  2. GROUP_CONCAT 結果截斷靜默發生,必須顯式設置 SET SESSION group_concat_max_len=1000000;。
  3. RAND() 在 ORDER BY 中導致全表掃描排序,大表抽樣用 WHERE RAND() < 0.01 或系統表抽樣。
  4. 加密函數輸出為二進制,存儲列類型需為 VARBINARY/BLOB,字符集列會導致數據損壞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved