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

MySQL 常用函數完整指南:從數學運算到加密處理

     編輯:MySQL 綜合教學

MySQL 常用函數完整指南:從數學運算到加密處理

MySQL 資料庫內建了豐富的函數庫,涵蓋數學運算、字串處理、日期時間、條件判斷、系統資訊、加密解密以及格式化等七大類別。善用這些函數能大幅簡化 SQL 查詢與資料處理邏輯,讓資料庫操作更靈活高效。本文將系統整理各類函數的語法、參數與實戰範例,協助開發者快速查找並正確應用。

一、數學函數

數學函數主要處理數值型資料(整數、浮點數),常用於統計計算、資料清洗等場景。

1. 絕對值與餘數

  • ABS(X):回傳 X 的絕對值。SELECT ABS(-32); -- 32
  • MOD(N, M) / N % M:回傳 N 除以 M 的餘數。SELECT MOD(15, 7); -- 1

2. 取整與四捨五入

  • FLOOR(X):回傳不大於 X 的最大整數(向下取整)。SELECT FLOOR(1.23); -- 1、SELECT FLOOR(-1.23); -- -2
  • CEILING(X):回傳不小於 X 的最小整數(向上取整)。SELECT CEILING(1.23); -- 2
  • ROUND(X):四捨五入至整數。SELECT ROUND(1.58); -- 2、SELECT ROUND(-1.58); -- -2

二、字串函數

字串函數是處理文字資料的核心工具,包含查詢、截取、替換、大小寫轉換等操作。

1. 基礎查詢與長度

  • ASCII(str):回傳字串最左字元的 ASCII 碼。空字串回傳 0,NULL 回傳 NULL。
  • LENGTH(str):回傳字串長度(位元組數)。

2. 字串連接與搜尋

  • CONCAT(str1, str2, ...):連接多個字串,任一參數為 NULL 則結果為 NULL。
  • LOCATE(substr, str) / INSTR(str, substr):搜尋子字串首次出現位置,未找到回傳 0。注意參數順序不同。

3. 截取與修剪

  • LEFT(str, len) / RIGHT(str, len):取左/右側指定長度字元。
  • SUBSTRING(str, pos):從指定位置開始截取至結尾。
  • TRIM(str) / LTRIM(str) / RTRIM(str):移除首尾/左側/右側空白字元。

4. 替換與進階操作

  • REPLACE(str, from_str, to_str):將所有 from_str 替換為 to_str。
  • REPEAT(str, count):重複字串 count 次。
  • REVERSE(str):反轉字串順序。
  • INSERT(str, pos, len, newstr):在 pos 位置替換 len 長度字元為 newstr。

三、日期與時間函數

MySQL 提供完整的日期時間處理能力,支援年月日、時分秒、星期、季度等多維度提取與運算。

1. 日期部份提取

  • DAYOFWEEK(date):星期索引(1=週日...7=週六)
  • WEEKDAY(date):星期索引(0=週一...6=週日)
  • DAYOFMONTH(date):月份中的第幾天(1-31)
  • DAYOFYEAR(date):年份中的第幾天(1-366)
  • MONTH(date) / MONTHNAME(date):月份數值/名稱
  • DAYNAME(date):星期名稱
  • QUARTER(date):季度(1-4)
  • YEAR(date):年份(1000-9999)
  • HOUR(time) / MINUTE(time) / SECOND(time):時/分/秒

2. 週數計算

WEEK(date, mode):mode=0 週日為週首,mode=1 週一為週首。

3. 日期加減運算

  • DATE_ADD(date, INTERVAL expr unit):日期加法
  • DATE_SUB(date, INTERVAL expr unit):日期減法
  • 支援單位:SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR 及組合單位(如 MINUTE_SECOND, DAY_HOUR 等)
SELECT DATE_ADD('1997-12-31 23:59:59', INTERVAL 1 SECOND);
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);

4. 當前日期時間

  • CURDATE() / CURRENT_DATE:目前日期(YYYY-MM-DD)
  • CURTIME() / CURRENT_TIME:目前時間(HH:MM:SS)
  • NOW():目前日期時間(YYYY-MM-DD HH:MM:SS)

四、流程控制函數

在 SQL 中實現條件邏輯判斷,類似程式語言的 if-else 或 switch-case。

1. CASE 運算式

-- 簡單 CASE
SELECT CASE 11 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;

-- 搜尋 CASE
SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;

2. IF 函數

IF(expr1, expr2, expr3):expr1 為真回傳 expr2,否則回傳 expr3。

SELECT IF(1>2, 2, 3); -- 3
SELECT IF(1<2, 'yes', 'no'); -- 'yes'

3. 字串比較

  • STRCMP(expr1, expr2):相等回傳 0,expr1

五、系統資訊函數

用於查詢資料庫運行環境、連線資訊、字元集等中繼資料。

  • VERSION():資料庫版本號
  • CONNECTION_ID():目前連線 ID(連線計數)
  • DATABASE() / SCHEMA():目前資料庫名稱
  • USER() / CURRENT_USER() / SESSION_USER() / SYSTEM_USER():目前使用者帳號
  • CHARSET(str) / COLLATION(str):字串的字元集與排序規則
  • LAST_INSERT_ID():最後一次自動遞增的 ID 值

六、加密函數

保護敏感資料(如密碼)的核心手段,MySQL 提供多種加密演算法。

  • PASSWORD(str):MySQL 內部使用的單向加密(已棄用於新版本)
  • MD5(str):MD5 雜湊,回傳 32 位十六進位字串
  • ENCODE(str, pwd) / DECODE(crypt, pwd):對稱加密/解密,需使用 BLOB 欄位儲存

建議:現代應用應在應用層使用 bcrypt、Argon2 等強雜湊演算法,資料庫層僅儲存雜湊值。

七、其他實用函數

1. 格式化函數

FORMAT(x, n):將數字 x 格式化為保留 n 位小數(四捨五入),並加上千分位逗號。SELECT FORMAT(235.3456, 3); -- 235.346

2. 進制轉換

  • BIN(x) / OCT(x) / HEX(x):二進位/八進位/十六進位表示
  • CONV(x, f1, f2):將 x 從 f1 進制轉換為 f2 進制

3. IP 地址轉換

  • INET_ATON('ip'):IPv4 字串轉無號整數
  • INET_NTOA(num):無號整數轉 IPv4 字串

4. 鎖機制

  • GET_LOCK(name, timeout):取得具名鎖
  • RELEASE_LOCK(name):釋放具名鎖
  • IS_FREE_LOCK(name):檢查鎖是否空閒

5. 效能測試

BENCHMARK(count, expr):重複執行 expr count 次,回傳耗時(秒)。

6. 型別轉換

  • CAST(x AS type) / CONVERT(x, type):支援 BINARY, CHAR, DATE, DATETIME, TIME, SIGNED/UNSIGNED INTEGER
  • CONVERT(s USING charset):字元集轉換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved