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

MySQL 內建函數完整參考手冊

     編輯:MySQL 綜合教學

MySQL 內建函數完整參考手冊

本文彙整 MySQL 常用內建函數,按功能分類並附帶語法與範例,方便開發與調優時快速查閱。函數行為可能因版本略有差異,實際使用請以官方文檔為準。

一、字串函數

函數說明範例
ASCII(str)回傳首字元 ASCII 碼ASCII('A') → 65
CHAR(N,...)依 ASCII 碼組合字串CHAR(77,121,83,81,76) → 'MySQL'
CONCAT(s1,s2,...)串接字串,任一為 NULL 則回傳 NULLCONCAT('My','SQL') → 'MySQL'
CONCAT_WS(sep,s1,s2...)帶分隔符串接,自動跳過 NULLCONCAT_WS(',','a',NULL,'c') → 'a,c'
LENGTH(str)位元組長度LENGTH('中文') → 6 (UTF8)
CHAR_LENGTH(str)字元長度CHAR_LENGTH('中文') → 2
LOCATE(sub,str,[pos])搜尋子字串位置(1-based)LOCATE('bar','foobar') → 4
SUBSTRING(str,pos,len)擷取子字串SUBSTRING('abcdef',3,2) → 'cd'
SUBSTRING_INDEX(str,delim,count)依分隔符擷取,count 正取左負取右SUBSTRING_INDEX('a.b.c','.',2) → 'a.b'
TRIM([BOTH|LEADING|TRAILING] rem FROM str)去除首尾指定字元TRIM('x' FROM 'xxhelloxx') → 'hello'
REPLACE(str,from,to)字串替換REPLACE('abc','a','x') → 'xbc'
REVERSE(str)反轉字串REVERSE('abc') → 'cba'
UPPER/LOWER(str)大小寫轉換UPPER('abc') → 'ABC'
LPAD/RPAD(str,len,pad)左/右填充至指定長度LPAD('5',3,'0') → '005'
FIND_IN_SET(str,list)在逗號列表中尋找位置FIND_IN_SET('b','a,b,c') → 2
ELT(N,str1,str2...)回傳第 N 個字串ELT(2,'a','b','c') → 'b'
FIELD(str,str1,str2...)回傳 str 在列表中的索引FIELD('b','a','b','c') → 2

二、數學函數

函數說明範例
ABS(x)絕對值ABS(-3) → 3
CEIL/FLOOR(x)向上/向下取整CEIL(1.2) → 2
ROUND(x,[d])四捨五入,d 為小數位ROUND(1.567,2) → 1.57
TRUNCATE(x,d)直接截斷(不四捨五入)TRUNCATE(1.567,2) → 1.56
MOD(n,m)取餘數MOD(10,3) → 1
POW(x,y)冪運算POW(2,3) → 8
SQRT(x)平方根SQRT(16) → 4
RAND([seed])隨機數 0~1,種子固定則序列固定RAND(1)
SIGN(x)正負號SIGN(-5) → -1
EXP/LOG/LOG10/LN指數/對數EXP(1) → 2.718...
PI()圓周率PI() → 3.141593
SIN/COS/TAN三角函數(弧度)SIN(PI()/2) → 1
DEGREES/RADIANS角度弧度互換DEGREES(PI()) → 180
LEAST/GREATEST(v1,v2...)最小/最大值GREATEST(3,5,1) → 5

三、日期時間函數

函數說明範例
NOW()/SYSDATE()當前日期時間NOW() → '2024-01-15 10:30:00'
CURDATE()/CURTIME()當前日期/時間CURDATE() → '2024-01-15'
DATE_ADD/DATE_SUB(date, INTERVAL expr unit)日期加減DATE_ADD(NOW(), INTERVAL 1 DAY)
DATEDIFF(d1,d2)兩日期差天數DATEDIFF('2024-01-15','2024-01-10') → 5
DATE_FORMAT(date,format)格式化輸出DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i')
STR_TO_DATE(str,format)字串解析為日期STR_TO_DATE('2024-01-15','%Y-%m-%d')
UNIX_TIMESTAMP([date])轉 Unix 時間戳UNIX_TIMESTAMP() → 1705285800
FROM_UNIXTIME(ts,[format])時間戳轉日期FROM_UNIXTIME(1705285800)
EXTRACT(unit FROM date)提取日期部分EXTRACT(MONTH FROM NOW())
DAYOFWEEK/WEEKDAY星期幾(1=週日/0=週一)WEEKDAY('2024-01-15') → 0
LAST_DAY(date)該月最後一天LAST_DAY('2024-02-10') → '2024-02-29'
QUARTER/WEEK/MONTH/YEAR提取季/週/月/年QUARTER(NOW()) → 1
SEC_TO_TIME/TIME_TO_SEC秒與 TIME 互換TIME_TO_SEC('01:00:00') → 3600

常用格式符號: %Y 四位年 %m 月(01-12) %d 日(01-31) %H 時(00-23) %i 分 %s 秒 %W 週名 %M 月名

四、流程控制與條件函數

函數說明範例
IF(expr, true_val, false_val)條件判斷IF(1>0,'yes','no') → 'yes'
CASE WHEN ... THEN ... ELSE ... END多條件分支見下方範例
COALESCE(v1,v2,...)回傳第一個非 NULL 值COALESCE(NULL,NULL,'a') → 'a'
NULLIF(expr1,expr2)相等回傳 NULL,否則 expr1NULLIF(5,5) → NULL
IFNULL(expr1,expr2)expr1 非 NULL 回傳 expr1,否則 expr2IFNULL(NULL,'x') → 'x'
-- CASE 範例
SELECT CASE 
  WHEN score >= 90 THEN 'A'
  WHEN score >= 60 THEN 'B'
  ELSE 'C'
END AS grade FROM student;

五、型別轉換函數

函數說明範例
CAST(expr AS type)標準 SQL 轉型CAST('123' AS UNSIGNED) → 123
CONVERT(expr, type)MySQL 擴充轉型(也可用於字元集轉換)CONVERT('abc' USING utf8mb4)
BIN/OCT/HEX/CONV進制轉換HEX(255) → 'FF'

六、資訊與加密函數

  • VERSION()、CONNECTION_ID()、DATABASE()、USER()、LAST_INSERT_ID()、ROW_COUNT()
  • MD5()、SHA1()、SHA2(str,256/512)、AES_ENCRYPT/DECRYPT、PASSWORD()(已棄用)

七、聚合與視窗函數(8.0+)

  • 傳統聚合:COUNT/SUM/AVG/MIN/MAX/GROUP_CONCAT
  • 視窗函數:ROW_NUMBER()、RANK()、DENSE_RANK()、LEAD/LAG()、FIRST_VALUE/LAST_VALUE()、NTILE(),需搭配 OVER (PARTITION BY ... ORDER BY ...) 使用。

八、JSON 函數(5.7+)

  • 建構:JSON_OBJECT()、JSON_ARRAY()、JSON_QUOTE()
  • 提取:JSON_EXTRACT(doc, path)、->、->> 操作符
  • 修改:JSON_SET/INSERT/REPLACE/REMOVE()
  • 檢查:JSON_VALID()、JSON_TYPE()、JSON_CONTAINS()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved