首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 函數大全:字符串、日期時間、系統信息、數學、加密壓縮分類速查

     編輯:MySQL 資料庫相關知識

一、字符串函數 (重點)

函數說明示例
CONCAT(s1,s2...)拼接字符串,任一參數為 NULL 結果為 NULL`CONCAT('My','SQL') → 'MySQL'`
CONCAT_WS(sep,s1,s2...)帶分隔符拼接,忽略 NULL`CONCAT_WS(',','a',NULL,'b') → 'a,b'`
LENGTH(str)字節長度`LENGTH('中文') → 6 (utf8mb4)`
CHAR_LENGTH(str)字符長度`CHAR_LENGTH('中文') → 2`
SUBSTRING(str,pos,len)截取子串 (1-based)`SUBSTRING('abcdef',2,3) → 'bcd'`
SUBSTRING_INDEX(str,delim,count)按分隔符截取 (count>0 左側, <0 右側)`SUBSTRING_INDEX('a.b.c','.',2) → 'a.b'`
LOCATE(substr,str,[pos])查找子串位置 (1-based, 未找到 0)`LOCATE('bar','foobar') → 4`
INSTR(str,substr)同 LOCATE 參數順序相反`INSTR('foobar','bar') → 4`
REPLACE(str,from,to)替換所有匹配`REPLACE('www.mysql.com','w','Ww') → 'WwWwWw.mysql.com'`
TRIM([BOTH|LEADING|TRAILING] [remstr] FROM str)去除首尾/首/尾指定字符 (默認空格)`TRIM(' abc ') → 'abc'`
LTRIM/RTRIM(str)去除左/右空格
UPPER/UCASE(str)轉大寫`UPPER('abc') → 'ABC'`
LOWER/LCASE(str)轉小寫
LPAD/RPAD(str,len,padstr)左/右填充至指定長度`LPAD('1',5,'0') → '00001'`
REPEAT(str,count)重複字符串`REPEAT('a',3) → 'aaa'`
REVERSE(str)反轉字符串`REVERSE('abc') → 'cba'`
INSERT(str,pos,len,newstr)替換指定位置長度子串`INSERT('Quadratic',3,4,'What') → 'QuWhattic'`
ELT(N,str1,str2...)返回第 N 個字符串 (1-based)`ELT(2,'a','b','c') → 'b'`
FIELD(str,str1,str2...)返回 str 在列表中索引 (1-based, 未找到 0)`FIELD('b','a','b','c') → 2`
FIND_IN_SET(str,strlist)查找字符串在逗號分隔列表中位置 (SET 類型優化)`FIND_IN_SET('b','a,b,c') → 2`
MAKE_SET(bits,str1,str2...)按位組合字符串集合`MAKE_SET(1|4,'a','b','c') → 'a,c'`
EXPORT_SET(bits,on,off,sep,nbits)按位生成 on/off 字符串`EXPORT_SET(5,'Y','N',',',4) → 'Y,N,Y,N'`
ASCII(str)首字符 ASCII 碼`ASCII('A') → 65`
ORD(str)首字符多字節編碼值
CHAR(N...)ASCII 碼轉字符串`CHAR(77,121,83,81,76) → 'MySQL'`
HEX(str/N)轉十六進制`HEX('MySQL') → '4D7953514C'`
UNHEX(str)十六進制轉二進制`UNHEX('4D7953514C') → 'MySQL'`
QUOTE(str)生成可用於 SQL 的帶引號字符串`QUOTE("Don't!") → "'Don\\'t!'"`

二、日期時間函數 (重點)

函數說明示例
NOW() / SYSDATE() / CURRENT_TIMESTAMP當前日期時間 (YYYY-MM-DD HH:MM:SS)`NOW() → '2023-10-01 12:00:00'`
CURDATE() / CURRENT_DATE當前日期`CURDATE() → '2023-10-01'`
CURTIME() / CURRENT_TIME當前時間`CURTIME() → '12:00:00'`
DATE(expr)提取日期部分`DATE(NOW()) → '2023-10-01'`
TIME(expr)提取時間部分`TIME(NOW()) → '12:00:00'`
YEAR/MONTH/DAY/HOUR/MINUTE/SECOND(date)提取對應部分`MONTH('2023-10-01') → 10`
DAYOFWEEK(date)星期索引 (1=周日...7=周六)
WEEKDAY(date)星期索引 (0=周一...6=周日)
DAYOFMONTH/DAY(date)月內天數 (1-31)
DAYOFYEAR(date)年內天數 (1-366)
WEEK(date,[mode])年內週數 (mode 控制起始日)
QUARTER(date)季度 (1-4)
MONTHNAME/DAYNAME(date)月份/星期英文名`MONTHNAME(NOW()) → 'October'`
DATE_FORMAT(date,format)格式化日期 (靈活、常用)`DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')`
TIME_FORMAT(time,format)格式化時間
STR_TO_DATE(str,format)字符串解析為日期 (反向操作)`STR_TO_DATE('01/10/2023','%d/%m/%Y')`
DATE_ADD(date,INTERVAL expr unit)日期加法`DATE_ADD(NOW(),INTERVAL 1 DAY)`
DATE_SUB(date,INTERVAL expr unit)日期減法`DATE_SUB(NOW(),INTERVAL 1 HOUR)`
ADDDATE/SUBDATE(date,INTERVAL...)DATE_ADD/SUB 別名
DATEDIFF(date1,date2)日期差 (天數)`DATEDIFF('2023-10-02','2023-10-01') → 1`
TIMEDIFF(time1,time2)時間差 (TIME 類型)
TIMESTAMPDIFF(unit,datetime1,datetime2)精確差值 (支持 MICROSECOND 等)`TIMESTAMPDIFF(SECOND, t1, t2)`
FROM_UNIXTIME(unix_ts,[format])Unix 時間戳轉日期時間`FROM_UNIXTIME(1696118400) → '2023-10-01 12:00:00'`
UNIX_TIMESTAMP([date])日期轉 Unix 時間戳 (秒)`UNIX_TIMESTAMP() → 1696118400`
SEC_TO_TIME(seconds)秒數轉 TIME (HH:MM:SS)`SEC_TO_TIME(3661) → '01:01:01'`
TIME_TO_SEC(time)TIME 轉總秒數`TIME_TO_SEC('01:01:01') → 3661`
LAST_DAY(date)該月最後一天日期
MAKEDATE(year,dayofyear)年+年內天數 生成日期
MAKETIME(hour,minute,second)生成時間
PERIOD_ADD(P,N) / PERIOD_DIFF(P1,P2)年月期間加減 (格式 YYYYMM)`PERIOD_ADD(202310,2) → 202312`

DATE_FORMAT 格式符速查

%Y 4位年  %y 2位年  %m 月(01-12)  %c 月(1-12)  %b 縮寫月名
%d 日(01-31)  %e 日(1-31)  %j 年內天(001-366)
%H 時(00-23)  %k 時(0-23)  %h/%I 時(01-12)  %l 時(1-12)
%i 分(00-59)  %S/%s 秒(00-59)
%r 12小時時間(hh:mm:ss AM/PM)  %T 24小時時間(hh:mm:ss)
%W 星期全名  %a 縮寫星期  %w 星期(0=周日-6=周六)
%U 週(00-53,周日首)  %u 週(00-53,周一首)
%% 字面 %

三、數學函數

函數說明
ABS(x)絕對值
CEIL/CEILING(x)向上取整
FLOOR(x)向下取整
ROUND(x,[d])四捨五入 (d 位小數)
TRUNCATE(x,d)截斷到 d 位小數 (不四捨五入)
MOD(x,y) / x % y取模
POW/POWER(x,y)冪運算
SQRT(x)平方根
RAND([seed])隨機數 (0-1),seed 固定可復現
SIGN(x)符號 (-1/0/1)
CONV(N,from_base,to_base)進制轉換 (2-36)

四、加密與壓縮函數

函數說明
MD5(str)MD5 雜湊 (32 字符十六進制)
SHA1(str) / SHA(str)SHA-1 雜湊 (40 字符)
SHA2(str,hash_len)SHA-2 族 (224/256/384/512)
PASSWORD(str)MySQL 密碼雜湊 (版本相關,**不可用於應用**)
ENCRYPT(str,[salt])Unix crypt() 加密 (舊)
AES_ENCRYPT(str,key) / AES_DECRYPT(crypt,key)AES 加解密 (默認 128 位 ECB,**不安全模式**)
DES_ENCRYPT/DECRYPTDES 加解密 (已棄用)
COMPRESS(str) / UNCOMPRESS(str)zlib 壓縮/解壓 (返回 BLOB)
UNCOMPRESSED_LENGTH(str)壓縮前長度

五、系統信息函數

函數說明
VERSION()服務器版本
CONNECTION_ID()當前連接 ID
DATABASE() / SCHEMA()當前默認數據庫
USER() / CURRENT_USER()當前認證用戶 / 當前有效用戶
LAST_INSERT_ID()上次 AUTO_INCREMENT 生成值 (會話隔離)
ROW_COUNT()上條語句影響行數
FOUND_ROWS()帶 SQL_CALC_FOUND_ROWS 查詢的總行數
BENCHMARK(count,expr)性能測試 (重複執行 expr)
INET_ATON(ip) / INET_NTOA(num)IP 地址與整數互轉
UUID()生成 UUID (標準格式)
UUID_SHORT()生成 64 位短 UUID (需 server_id 配置)

六、條件/流程控制函數 (SQL 中使用)

函數說明
IF(expr, true_val, false_val)三元運算
IFNULL(expr1, expr2)expr1 非 NULL 返回 expr1,否則 expr2
COALESCE(v1,v2,...)返回第一個非 NULL 值
NULLIF(expr1, expr2)相等返回 NULL,否則 expr1
CASE WHEN cond THEN val ... ELSE val END多分支 (表達式/搜索式)
GREATEST/LEAST(v1,v2...)最大/最小值 (任一 NULL 結果 NULL)

七、JSON 函數 (5.7+)

JSON_EXTRACT(doc, path) / ->     -- 提取值 (帶引號)
JSON_UNQUOTE(JSON_EXTRACT(...)) / ->>  -- 提取純值
JSON_SET(doc, path, val)         -- 修改/插入
JSON_REMOVE(doc, path)           -- 刪除
JSON_ARRAY()/JSON_OBJECT()       -- 構造
JSON_CONTAINS/JSON_SEARCH        -- 查詢
JSON_TABLE() (8.0)               -- JSON 轉關係表

八、常用聚合函數

COUNT(*) / COUNT(col) / COUNT(DISTINCT col)
SUM/AVG/MIN/MAX(col)
GROUP_CONCAT(col SEPARATOR ',')  -- 分組拼接 (受 group_concat_max_len 限制)
STDDEV/STDDEV_POP/VARIANCE       -- 統計

使用建議

  • **日期計算優先用 `DATE_ADD/SUB` + `INTERVAL`**,避免字符串拼接。
  • **字符串拼接用 `CONCAT_WS`** 避免 NULL 導致全 NULL。
  • **分頁查詢大偏移量優化**:`WHERE id > last_id LIMIT n` 代替 `LIMIT offset, n`。
  • **加密存儲密碼**:應用層用 `bcrypt`/`Argon2`,**不要用 MySQL `PASSWORD()`/`MD5()`/`SHA1()`**。
  • **JSON 查詢建立虛擬列索引** (5.7+) / 多值索引 (8.0+) 提升性能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved