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

MySQL 常用函數速查手冊:日期、字串、數學、加密四大類完整指引

     編輯:MySQL 綜合教學

MySQL 常用函數速查手冊:日期、字串、數學、加密四大類完整指引

函數是 SQL 表達力的延伸。本文將 MySQL 核心內建函數按業務場景分為四大類,提煉高頻函數簽名、參數說明、返回值特性與實戰範例,打造「查得快、用得對、不踩坑」的桌面級速查手冊。

一、日期與時間函數

函數說明範例返回示例
NOW()當前日期時間(執行開始時刻固定)SELECT NOW();2023-10-11 14:30:45
SYSDATE()當前日期時間(實時執行時刻)SELECT SYSDATE(), SLEEP(2), SYSDATE();前後相差 2 秒
CURDATE()當前日期SELECT CURDATE();2023-10-11
CURTIME()當前時間SELECT CURTIME();14:30:45
DATE_FORMAT(d, fmt)格式化輸出SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');2023-10-11 14:30:45
DATE_ADD(d, INTERVAL expr unit)日期加減運算SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);翌日同一時間
DATEDIFF(d1, d2)兩日期相差天數SELECT DATEDIFF('2023-10-11', '2023-10-01');10
TIMESTAMPDIFF(unit, d1, d2)精確間隔(支援 MICROSECOND 等)SELECT TIMESTAMPDIFF(SECOND, '2023-10-11 10:00:00', NOW());秒數差
YEAR/MONTH/DAY/HOUR/MINUTE/SECOND(d)提取單一分量SELECT MONTH(NOW());10
WEEKDAY(d) / DAYOFWEEK(d)星期索引(0=週一/1=週日)SELECT WEEKDAY(NOW());2 (週三)
LAST_DAY(d)所在月最後一天SELECT LAST_DAY(NOW());2023-10-31
STR_TO_DATE(str, fmt)字串解析為日期SELECT STR_TO_DATE('20231011', '%Y%m%d');2023-10-11

避坑提示:NOW() 在存儲函數/觸發器中只計算一次;SYSDATE() 每次調用取實時值,複製場景下行為不同。

二、字串函數

函數說明範例返回示例
CHAR_LENGTH(s) / CHARACTER_LENGTH(s)字符數(多位元組字符計 1)SELECT CHAR_LENGTH('中文');2
LENGTH(s)位元組數SELECT LENGTH('中文');6 (utf8mb4)
CONCAT(s1, s2, ...)拼接,任一 NULL 結果 NULLSELECT CONCAT('a', NULL, 'c');NULL
CONCAT_WS(sep, s1, s2, ...)帶分隔符拼接,自動跳過 NULLSELECT CONCAT_WS(',', 'a', NULL, 'c');a,c
UPPER(s) / LOWER(s)大小寫轉換SELECT UPPER('abc');ABC
TRIM([BOTH|LEADING|TRAILING] [remstr] FROM s)去除首尾空白或指定字符SELECT TRIM(' abc ');abc
SUBSTRING(s, pos, len) / SUBSTR(s, pos, len)子串提取(位置從 1 開始,負數倒數)SELECT SUBSTRING('abcdef', 2, 3);bcd
REPLACE(s, from_str, to_str)全量替換SELECT REPLACE('a,b,c', ',', ';');a;b;c
LOCATE(substr, s, [pos]) / INSTR(s, substr)子串首次出現位置SELECT LOCATE('b', 'abc');2
LEFT(s, len) / RIGHT(s, len)左/右定長截取SELECT LEFT('abcdef', 3);abc

三、數學函數

函數說明範例返回示例
ABS(x)絕對值SELECT ABS(-5);5
CEIL(x) / CEILING(x)向上取整SELECT CEIL(5.1);6
FLOOR(x)向下取整SELECT FLOOR(5.9);5
ROUND(x, [d])四捨五入,d 為小數位SELECT ROUND(5.678, 2);5.68
TRUNCATE(x, d)截斷(不四捨五入)SELECT TRUNCATE(5.678, 2);5.67
MOD(x, y) / x % y取模/餘數SELECT MOD(10, 3);1
POW(x, y) / POWER(x, y)冪運算SELECT POW(2, 3);8
SQRT(x)平方根SELECT SQRT(16);4
RAND([seed])隨機數 0~1,種子固定可復現SELECT RAND();0.123...
SIGN(x)符號:正 1、零 0、負 -1SELECT SIGN(-5);-1

四、加密與雜湊函數

函數類型說明安全性建議
MD5(str)雜湊128 位十六進位字串,不可逆僅用於非安全場景(檔案校驗),密碼嚴禁
SHA1(str) / SHA(str)雜湊160 位,不可逆同 MD5,不適合密碼存儲
SHA2(str, hash_len)雜湊支援 224/256/384/512 位SHA2(str, 256) 可作一般雜湊,密碼仍需專用
PASSWORD(str)專用MySQL 內部認證雜湊,**8.0 已移除**嚴禁業務使用,版本不兼容
AES_ENCRYPT(str, key) / AES_DECRYPT(crypt, key)對稱加密AES-128-ECB,金鑰長度 16 位元組金鑰管理難,建議應用層加密
ENCODE(str, pwd) / DECODE(crypt, pwd)弱加密**已棄用/移除**,極不安全嚴禁使用

五、密碼存儲黃金標準(業務層實現)

-- 應用層使用 bcrypt / Argon2id / PBKDF2
-- 偽碼示例:
hash = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
-- 驗證:
bcrypt.checkpw(password, hash)

原則:資料庫只存儲雜湊值,**不做加密運算**;採用自帶鹽值、可調計算成本、記憶體困難的專用演算法。

六、函數組合實戰範例

  • 本月第一天 00:00:00:DATE_FORMAT(NOW(), '%Y-%m-01 00:00:00')
  • 上月最後一天 23:59:59:DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 SECOND)
  • 手機號脫敏:CONCAT(LEFT(phone, 3), '****', RIGHT(phone, 4))
  • UUID 短碼:REPLACE(UUID(), '-', '') → 32 位十六進位

將此手冊加入收藏,下次寫 SQL 遇到「這個函數怎麼用」直接檢索,效率翻倍。

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