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

MySQL 內建函數大全:數學、字串、日期、條件、系統、加密、格式化七大類完整手冊

     編輯:MySQL 綜合教學

MySQL 內建函數大全:數學、字串、日期、條件、系統、加密、格式化七大類完整手冊

MySQL 提供豐富的標量函數,善用可大幅簡化應用層代碼。本文按功能分類整理,附帶語法、說明與可執行範例,方便開發隨時查閱。

一、數學函數

函數說明範例
ABS(x)絕對值SELECT ABS(-1) → 1
CEIL/CEILING(x)向上取整SELECT CEIL(1.5) → 2
FLOOR(x)向下取整SELECT FLOOR(1.5) → 1
RAND() / RAND(seed)0~1 隨機數,種子固定序列可重現SELECT RAND(2) → 0.655...
SIGN(x)符號:負/零/正 → -1/0/1SELECT SIGN(-10) → -1
PI()圓周率SELECT PI() → 3.141593
TRUNCATE(x, y)截斷到 y 位小數(不四捨五入)SELECT TRUNCATE(1.23456,3) → 1.234
ROUND(x) / ROUND(x, y)四捨五入整數 / 保留 y 位SELECT ROUND(1.23456,3) → 1.235
POW/POWER(x, y)x 的 y 次方SELECT POW(2,3) → 8
SQRT(x)平方根SELECT SQRT(25) → 5
EXP(x)e 的 x 次方SELECT EXP(3) → 20.0855
MOD(x, y)餘數SELECT MOD(5,2) → 1
LOG(x) / LOG10(x)自然對數 / 以 10 為底SELECT LOG(20.0855) → 3
RADIANS/DEGREES角度⇄弧度SELECT RADIANS(180) → 3.14159
SIN/COS/TAN/COT三角函數(參數為弧度)SELECT SIN(RADIANS(30)) → 0.5
ASIN/ACOS/ATAN/ATAN2反三角函數

二、字串函數

函數說明範例
CHAR_LENGTH(s)字元數SELECT CHAR_LENGTH('你好123') → 5
LENGTH(s)位元組長度SELECT LENGTH('你好123') → 9 (UTF-8)
CONCAT(s1,s2...)串聯SELECT CONCAT('12','34') → '1234'
CONCAT_WS(sep,s1,s2...)帶分隔符串聯SELECT CONCAT_WS('@','12','34') → '12@34'
INSERT(s1,pos,len,s2)s1 從 pos 長度 len 替換為 s2SELECT INSERT('12345',1,3,'abc') → 'abc45'
UPPER/UCASE / LOWER/LCASE大/小寫轉換SELECT UPPER('abc') → 'ABC'
LEFT(s,n) / RIGHT(s,n)左/右 n 字元SELECT LEFT('abcde',2) → 'ab'
LPAD/RPAD(s1,len,s2)左/右填充 s2 至長度 lenSELECT LPAD('abc',5,'xx') → 'xxabc'
LTRIM/RTRIM/TRIM去左/右/兩側空格SELECT TRIM(' abc ') → 'abc'
TRIM(c FROM s)去兩側指定字元 cSELECT TRIM('@' FROM '@@abc@@') → 'abc'
REPEAT(s,n)重複 n 次SELECT REPEAT('ab',3) → 'ababab'
SPACE(n)n 個空格
REPLACE(s,old,new)替換所有 old 為 newSELECT REPLACE('abc','a','x') → 'xbc'
STRCMP(s1,s2)比較:相等 0,s1s2 1
SUBSTRING/MID(s,pos,len)擷取子字串
LOCATE/POSITION/INSTR查找子字串位置SELECT LOCATE('b','abc') → 2
REVERSE(s)反轉字串SELECT REVERSE('abc') → 'cba'
ELT(n,s1,s2...)返回第 n 個字串SELECT ELT(2,'a','b','c') → 'b'
FIELD(s,s1,s2...)返回 s 在列表中位置SELECT FIELD('c','a','b','c') → 3
FIND_IN_SET(s1,s2)逗號列表中查找位置
SUBSTRING_INDEX(s,delim,count)按分隔符切分取段SELECT SUBSTRING_INDEX('a*b*c','*',2) → 'a*b'
LOAD_FILE(path)讀取伺服器檔案內容需 FILE 權限,路徑需絕對路徑

三、日期時間函數

函數說明範例
NOW()/CURRENT_TIMESTAMP()當前日期時間2014-12-17 15:59:02
CURDATE()/CURRENT_DATE()當前日期2014-12-17
CURTIME()/CURRENT_TIME()當前時間15:59:02
UNIX_TIMESTAMP() / UNIX_TIMESTAMP(d)當前/指定時間轉時間戳SELECT UNIX_TIMESTAMP('2011-11-11 11:11:11') → 1320981071
FROM_UNIXTIME(ts)時間戳轉日期時間SELECT FROM_UNIXTIME(1320981071) → 2011-11-11 11:11:11
UTC_DATE/TIMEUTC 日期/時間比本地時間慢 8 小時 (CST)
MONTH/MONTHNAME/DAYNAME月份數/名、星期名SELECT MONTHNAME('2011-11-11') → 'November'
DAYOFWEEK/WEEKDAY星期幾 (1=周日/0=周一)SELECT DAYOFWEEK('2011-11-11') → 6
WEEK/WEEKOFYEAR第幾周 (0-53)SELECT WEEK('2011-11-11') → 45
DAYOFYEAR/DAYOFMONTH第幾天/月第幾天SELECT DAYOFMONTH('2011-11-11') → 11
QUARTER季度 (1-4)SELECT QUARTER('2011-11-11') → 4
HOUR/MINUTE/SECOND時/分/秒SELECT HOUR('1:2:3') → 1
EXTRACT(unit FROM d)擷取指定單位unit: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR 等組合
TIME_TO_SEC/SEC_TO_TIME時間⇄秒數SELECT TIME_TO_SEC('1:12:00') → 4320
TO_DAYS/FROM_DAYS日期⇄公元元年天數SELECT TO_DAYS('0001-01-01') → 366
DATEDIFF(d1,d2)日期差天數SELECT DATEDIFF('2001-01-01','2001-02-02') → -32
DATE_ADD/ADDDATE(d, INTERVAL expr unit)日期加間隔SELECT ADDDATE('2011-11-11', INTERVAL 5 MINUTE) → '2011-11-11 11:16:11'
DATE_SUB/SUBDATE(d, INTERVAL expr unit)日期減間隔
ADDTIME/SUBTIME(t, n)時間加/減秒數SELECT ADDTIME('11:11:11',5) → '11:11:16'
DATE_FORMAT(d,fmt) / TIME_FORMAT(t,fmt)格式化輸出SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
GET_FORMAT(type, locale)取得地區化格式字串SELECT GET_FORMAT(DATE,'USA') → '%m.%d.%Y'

四、條件判斷函數

  1. IF(expr, v1, v2):expr 真回傳 v1,否則 v2。
    SELECT IF(1>0,'對','錯') → '對'
  2. IFNULL(v1, v2):v1 非 NULL 回傳 v1,否則 v2。
    SELECT IFNULL(NULL,'Hello') → 'Hello'
  3. CASE WHEN 條件模式:
    CASE WHEN e1 THEN v1 WHEN e2 THEN v2 ... ELSE vn END
    SELECT CASE WHEN 1>0 THEN '1>0' WHEN 2>0 THEN '2>0' ELSE '3>0' END → '1>0'
    
  4. CASE 值匹配模式:
    CASE expr WHEN e1 THEN v1 WHEN e2 THEN v2 ... ELSE vn END
    SELECT CASE 1 WHEN 1 THEN '我是1' WHEN 2 THEN '我是2' ELSE '其他' END → '我是1'
    

五、系統資訊函數

函數說明
VERSION()伺服器版本
CONNECTION_ID()當前連線 ID
DATABASE()/SCHEMA()當前資料庫
USER()/SYSTEM_USER()/CURRENT_USER()當前用戶
CHARSET(str)/COLLATION(str)字元集/排序規則
LAST_INSERT_ID()最後自增 ID

六、加密函數

  1. PASSWORD(str):MySQL 內部認證雜湊(版本相關)。
    SELECT PASSWORD('123') → *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
  2. MD5(str):32 位十六進位,不可逆。
    SELECT MD5('123') → 202cb962ac59075b964b07152d234b70
  3. ENCODE/DECODE(str, pwd):對稱加密,結果為二進位需 BLOB 存儲(5.7+ 棄用)。
    SELECT ENCODE('123','xxoo') → 二進位; SELECT DECODE(..., 'xxoo') → '123'

七、其他實用函數

  1. FORMAT(x, n):數值千分位格式化,保留 n 位小數。
    SELECT FORMAT(3.1415926,3) → '3.142'
  2. 進制轉換:ASCII(s)、BIN(x)、HEX(x)、OCT(x)、CONV(x, from_base, to_base)
  3. IP 轉換:INET_ATON('192.168.0.1') → 3232235521;INET_NTOA(3232235521) → '192.168.0.1'
  4. 鎖函數:GET_LOCK(name, timeout) 取得命名鎖;RELEASE_LOCK(name) 釋放;IS_FREE_LOCK(name) 檢查。
    應用:分散式鎖、防止並發重複執行。
  5. BENCHMARK(count, expr):重複執行 expr count 次,回傳耗時(效能基準測試)。
    SELECT BENCHMARK(10000, NOW()) → 0
  6. 字元集轉換:CONVERT(s USING charset)。
    SELECT CHARSET(CONVERT('ABC' USING gbk)) → 'gbk'
  7. 型別轉換:CAST(x AS type) / CONVERT(x, type)。支援 BINARY, CHAR, DATE, DATETIME, TIME, SIGNED, UNSIGNED。
    SELECT CAST('123' AS UNSIGNED) + 1 → 124

提示:MySQL 8.0 新增窗口函數、CTE、JSON 函數等進階功能,建議配合官方文檔持續學習。

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