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

MySQL 內建函數大全:數學、字串、日期時間、條件、系統、加密、資訊、其他八大類完整參考

     編輯:MySQL 綜合教學

MySQL 內建函數大全:數學、字串、日期時間、條件、系統、加密、資訊、其他八大類完整參考

MySQL 提供豐富的內建函數,遠超 SQL Server。本文按功能分類整理核心函數語法、參數、回傳值與實戰範例,重點標註與 SQL Server 的差異,作為開發速查手冊。

一、數學函數

函數說明範例
ABS(x)絕對值ABS(-5)=5
MOD(x,y)取模(支援小數)MOD(31,8)=7、MOD(1.5,0.7)=0.1
TRUNCATE(x,d)截斷到 d 位小數(不四捨五入)TRUNCATE(1.32,1)=1.3
ROUND(x,d)四捨五入ROUND(1.35,1)=1.4
CEIL(x)/FLOOR(x)向上/向下取整CEIL(1.1)=2
POW(x,y)/POWER(x,y)x 的 y 次方POW(2,3)=8
SQRT(x)平方根SQRT(4)=2
RAND([seed])0~1 隨機數,種子固定序列可重現RAND(10)
SIGN(x)正負號 -1/0/1SIGN(-5)=-1
CONV(n, from, to)進制轉換CONV('a',16,2)='1010'

二、字串函數

函數說明範例
CHAR_LENGTH(str)字元數(多位元組算 1)CHAR_LENGTH('中文')=2
LENGTH(str)位元組數LENGTH('中文')=6 (utf8mb4)
CONCAT(s1,s2,...)連接,任一 NULL 結果 NULLCONCAT('a','b')='ab'
CONCAT_WS(sep, s1,s2,...)帶分隔符連接,自動跳過 NULLCONCAT_WS('-','a',NULL,'c')='a-c'
INSERT(str,pos,len,newstr)替換子串(對應 STUFF)INSERT('abcdef',2,2,'XY')='aXYdef'
LPAD(str,len,pad)/RPAD左右填充至指定長度LPAD('5',3,'0')='005'
TRIM([BOTH|LEADING|TRAILING] rem FROM str)去除兩側指定字串(預設空格)TRIM('x' FROM 'xxabcxx')='abc'
REPLACE(str,from,to)全部替換REPLACE('a b',' ','-')='a-b'
SUBSTRING(str,pos,len)子串(支援負位置從右算)SUBSTRING('abcdef',2,3)='bcd'
LOCATE(sub,str)/POSITION/INSTR子串首次出現位置LOCATE('b','abc')=2
STRCMP(s1,s2)比較回傳 -1/0/1STRCMP('a','b')=-1
FIELD(str, s1,s2...)str 在列表中位置(1-based)FIELD('b','a','b','c')=2
FIND_IN_SET(str, list)逗號分隔列表中位置FIND_IN_SET('b','a,b,c')=2
ELT(n, s1,s2...)返回第 n 個字串ELT(2,'a','b')='b'
MAKE_SET(bits, s1,s2...)bits 二進制位對應字串集合MAKE_SET(5,'a','b','c')='a,c' (5=101b)
REPEAT(str, n)重複 n 次REPEAT('ab',3)='ababab'
REVERSE(str)反轉字串REVERSE('abc')='cba'
HEX(str)/UNHEX(hex)字串↔十六進制HEX('abc')='616263'

三、日期時間函數

函數說明範例
NOW()/SYSDATE()當前日期時間2024-01-15 10:30:00
CURDATE()/CURTIME()當前日期/時間
UTC_DATE()/UTC_TIME()/UTC_TIMESTAMP()UTC 日期/時間/時間戳
DATE_ADD(d, INTERVAL expr unit)日期加減DATE_ADD(NOW(), INTERVAL 1 DAY)
DATEDIFF(d1,d2)兩日期天數差DATEDIFF('2024-01-15','2024-01-10')=5
DATE_FORMAT(d, fmt)日期格式化DATE_FORMAT(NOW(),'%Y-%m-%d')
STR_TO_DATE(str, fmt)字串解析為日期STR_TO_DATE('20240115','%Y%m%d')
EXTRACT(unit FROM d)提取日期部分(對應 DATEPART)EXTRACT(MONTH FROM NOW())
TIME_TO_SEC(t)/SEC_TO_TIME(s)時間↔秒互轉TIME_TO_SEC('01:00:00')=3600
UNIX_TIMESTAMP([d])日期轉 Unix 時間戳UNIX_TIMESTAMP()
FROM_UNIXTIME(ts)時間戳轉日期FROM_UNIXTIME(1705286400)
MONTHNAME(d)月份英文全名MONTHNAME('2024-01-15')='January'
QUARTER(d)季度 1~4QUARTER('2024-04-01')=2
WEEK(d,mode)/WEEKOFYEAR(d)週數
LAST_DAY(d)該月最後一天LAST_DAY('2024-02-10')='2024-02-29'

四、條件/流程控制函數

函數說明範例
IF(expr, v1, v2)expr 真回傳 v1 否則 v2IF(1>2,'yes','no')='no'
IFNULL(v1, v2)v1 非 NULL 回傳 v1 否則 v2IFNULL(NULL, 'def')='def'
CASE WHEN cond THEN val ... ELSE val END多條件分支CASE WHEN score>=90 THEN 'A' ELSE 'B' END
NULLIF(v1,v2)v1=v2 回傳 NULL 否則 v1 (SQL Server 有)NULLIF(1,1)=NULL

五、系統/資訊函數

函數說明
VERSION()MySQL 版本字串
CONNECTION_ID()當前連線 ID
DATABASE()/SCHEMA()當前資料庫名
USER()/CURRENT_USER()當前認證用戶@主機
CHARSET(str)字串字元集
COLLATION(str)字串排序規則
LAST_INSERT_ID()最後自增 ID(會話級,批次 INSERT 只回傳第一筆)
ROW_COUNT()前一條 DML 影響行數
FOUND_ROWS()配合 SQL_CALC_FOUND_ROWS 取總行數
BENCHMARK(count, expr)效能基準測試
SHOW PROCESSLIST/SHOW FULL PROCESSLIST當前執行緒狀態(含 Info SQL 文本)

六、加密函數

函數說明備註
PASSWORD(str)MySQL 內部認證加密(5.7+ 已棄用,8.0 移除)不可逆,勿用於應用層
MD5(str)MD5 雜湊(32 位十六進制)不可逆
SHA1(str)/SHA2(str, 256|512)SHA 雜湊不可逆
AES_ENCRYPT(str, key)/AES_DECRYPT對稱加密(128/256 bit)可逆,金鑰管理需謹慎
ENCODE(str, pwd)/DECODE(crypt, pwd)簡易加解密(已棄用)不建議生產使用

七、其他實用函數

函數說明範例
FORMAT(x, d)數字格式化含千分位FORMAT(12345.67,2)='12,345.67'
INET_ATON(ip)IPv4 字串轉無符號整數INET_ATON('192.168.1.1')=3232235777
INET_NTOA(num)整數轉 IPv4 字串INET_NTOA(3232235777)='192.168.1.1'
GET_LOCK(name, timeout)應用層命名鎖(阻塞等待)回傳 1 成功、0 逾時、NULL 錯誤
RELEASE_LOCK(name)釋放命名鎖
UUID()生成 UUID (RFC 4122)UUID()='a1b2c3d4-...'
UUID_SHORT()短整數唯一 ID(全域唯一)適合分散式 ID 生成
SLEEP(sec)休眠秒數測試用
CAST(x AS type)/CONVERT(x, type)型別轉換CAST(100 AS CHAR(2))='10'

八、聚合函數

函數說明
COUNT(expr)/COUNT(DISTINCT expr)非 NULL 行數 / 去重計數
SUM/AVG/MIN/MAX([DISTINCT] expr)求和/平均/最小/最大
GROUP_CONCAT([DISTINCT] expr ORDER BY ... SEPARATOR ',')分組字串聚合(MySQL 特有,極實用)
STD/STDDEV/VARIANCE/VAR_POP/VAR_SAMP標準差/變異數
BIT_AND/OR/XOR(expr)位元運算聚合

總結建議

  1. 日期時間以 DATETIME/TIMESTAMP 儲存,勿用字串。
  2. 字元集統一 utf8mb4,修改 my.cnf 的 character-set-server 並重啟。
  3. 加密敏感資料用 AES_ENCRYPT + 金鑰管理系統,勿用 MD5/PASSWORD。
  4. 分組聚合字串優先用 GROUP_CONCAT,避免應用層拼接。
  5. 效能基準測試用 BENCHMARK,但注意其為客戶端計時,非伺服器 CPU 時間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved