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

MySQL 內建函數大全速查手冊:字串、日期時間、流程控制、系統資訊分類詳解(增強版)

     編輯:MySQL 綜合教學

MySQL 內建函數大全速查手冊:字串、日期時間、流程控制、系統資訊分類詳解(增強版)

MySQL 提供豐富的內建函數,熟練掌握常用函數能大幅提升 SQL 編寫效率。本文按功能分類整理核心函數語法、參數說明與實用範例,適合開發、調優、面試速查。

一、字串函數精選

函數說明範例結果
ASCII(str)返回最左字元 ASCII 碼ASCII('d')100
ORD(str)多位元組字元編碼值ORD('中')20013
CONV(N,from,to)進制轉換CONV('a',16,2)'1010'
BIN(N)二進制字串BIN(12)'1100'
HEX(N)十六進制字串HEX(255)'FF'
CHAR(N,...)ASCII 碼轉字串CHAR(77,121,83,81,76)'MySQL'
CONCAT(s1,s2,...)字串連接,任一 NULL 則回 NULLCONCAT('ab','cd')'abcd'
CONCAT_WS(sep,...)帶分隔符連接,跳過 NULLCONCAT_WS(',','a',NULL,'c')'a,c'
LENGTH(str)位元組長度LENGTH('中文')6 (UTF8)
CHAR_LENGTH(str)字元長度CHAR_LENGTH('中文')2
LOCATE(sub,str,[pos])子串位置,不存在回 0LOCATE('b','abc')2
SUBSTRING(str,pos,len)截取子串SUBSTRING('Hello',2,3)'ell'
SUBSTRING_INDEX(str,delim,count)按分隔符截取,count 正左負右SUBSTRING_INDEX('a.b.c','.',2)'a.b'
TRIM([BOTH|LEADING|TRAILING] rem FROM str)去除前綴/後綴/兩側字元TRIM('x' FROM 'xxabcxx')'abc'
REPLACE(str,from,to)全部替換REPLACE('a.b.c','.','|')'a|b|c'
REPEAT(str,count)重複字串REPEAT('ab',3)'ababab'
REVERSE(str)反轉字串REVERSE('abc')'cba'
INSERT(str,pos,len,newstr)位置替換INSERT('Quadratic',3,4,'What')'QuWhattic'
ELT(N,str1,str2...)返回第 N 個字串ELT(2,'a','b','c')'b'
FIELD(str,str1,str2...)返回字串在列表中的索引FIELD('b','a','b','c')2
FIND_IN_SET(str,set_str)集合中查找位置(集合以逗號分隔)FIND_IN_SET('b','a,b,c')2
MAKE_SET(bits,str1,str2...)按位組合集合MAKE_SET(5,'a','b','c')'a,c'
LCASE/LOWER(str)轉小寫LOWER('ABC')'abc'
UCASE/UPPER(str)轉大寫UPPER('abc')'ABC'
LOAD_FILE(path)讀取伺服器檔案內容(需 FILE 權限)LOAD_FILE('/tmp/data.txt')檔案內容

二、日期時間函數精選

函數說明範例
NOW() / SYSDATE()當前日期時間2024-01-15 10:30:45
CURDATE()當前日期2024-01-15
CURTIME()當前時間10:30:45
DATE_ADD(date, INTERVAL expr unit)日期加法DATE_ADD('2024-01-15', INTERVAL 3 DAY)
DATE_SUB(date, INTERVAL expr unit)日期減法DATE_SUB('2024-01-15', INTERVAL 1 MONTH)
DATEDIFF(date1, date2)日期差天數DATEDIFF('2024-01-15','2024-01-10') → 5
DATE_FORMAT(date, format)格式化輸出DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
STR_TO_DATE(str, format)字串解析為日期STR_TO_DATE('20240115','%Y%m%d')
UNIX_TIMESTAMP([date])轉 Unix 時間戳UNIX_TIMESTAMP() → 1705285845
FROM_UNIXTIME(ts,[format])時間戳轉日期FROM_UNIXTIME(1705285845)
DAYOFWEEK(date)星期索引 (1=週日)DAYOFWEEK('2024-01-15') → 2
WEEKDAY(date)星期索引 (0=週一)WEEKDAY('2024-01-15') → 0
MONTH(date)月份 (1-12)
YEAR(date)年份
HOUR/MINUTE/SECOND(time)時/分/秒
LAST_DAY(date)該月最後一天LAST_DAY('2024-02-10') → 2024-02-29
QUARTER(date)季度 (1-4)
WEEK(date,[mode])年度週數
PERIOD_ADD(P,N)年月加 N 月PERIOD_ADD(202401,3) → 202404
PERIOD_DIFF(P1,P2)年月差月數PERIOD_DIFF(202404,202401) → 3
TO_DAYS(date)日期轉天數 (從 year 0)
FROM_DAYS(N)天數轉日期

常用格式化符號

  • %Y 四位年、%y 兩位年
  • %m 月(01-12)、%c 月(1-12)
  • %d 日(01-31)、%e 日(1-31)
  • %H 時(00-23)、%h 時(01-12)
  • %i 分、%s 秒
  • %W 週名、%M 月名

三、流程控制函數

函數語法說明
CASECASE val WHEN v1 THEN r1 ... ELSE r ELSE END值比較分支
CASECASE WHEN cond1 THEN r1 ... ELSE r ELSE END條件分支
IF(cond, true_val, false_val)三元運算,cond 為非 0/NULL 視為真
IFNULL(val1, val2)val1 非 NULL 回 val1,否則 val2
NULLIF(val1, val2)相等回 NULL,否則回 val1

IF() 陷阱

SELECT IF(0.1, 1, 0);   -- 回 0!0.1 轉整數為 0
SELECT IF(0.1 <> 0, 1, 0); -- 回 1,正確比較

四、系統資訊函數

  • VERSION() — 伺服器版本
  • CONNECTION_ID() — 當前連接 ID
  • DATABASE() / SCHEMA() — 當前資料庫
  • USER() / CURRENT_USER() — 當前用戶
  • LAST_INSERT_ID() — 最後自增 ID
  • ROW_COUNT() — 最後 UPDATE/INSERT 影響行數
  • FOUND_ROWS() — 最後 SELECT 檢索行數 (配合 SQL_CALC_FOUND_ROWS)
  • BENCHMARK(count, expr) — 重複執行 expr 計時測試

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

  • ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)
  • RANK() / DENSE_RANK()
  • LEAD() / LAG()
  • FIRST_VALUE() / LAST_VALUE()
  • NTILE(n)

善用函數簡化 SQL、下推計算至資料庫層,減少應用層資料傳輸與處理。

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