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

MySQL 函數大全:字符串、日期、數值處理函數分類速查與實戰示例

     編輯:MySQL 綜合教學

一、字符串處理函數

函數說明示例
LEFT(str, n)左起 n 字符`LEFT('abcdef', 3)` → `'abc'`
RIGHT(str, n)右起 n 字符`RIGHT('abcdef', 3)` → `'def'`
LENGTH(str)字節長度`LENGTH('中文')` → `6` (utf8mb4)
CHAR_LENGTH(str)字符長度`CHAR_LENGTH('中文')` → `2`
LOCATE(sub, str)子串位置 (1-based)`LOCATE('cd', 'abcdef')` → `3`
LOWER(str)轉小寫`LOWER('ABC')` → `'abc'`
UPPER(str)轉大寫`UPPER('abc')` → `'ABC'`
LTRIM(str)去左空格`LTRIM(' a')` → `'a'`
RTRIM(str)去右空格`RTRIM('a ')` → `'a'`
TRIM(str)去兩端空格`TRIM(' a ')` → `'a'`
SUBSTRING(str, pos, len)截取子串`SUBSTRING('abcdef', 2, 3)` → `'bcd'`
CONCAT(str1, str2...)拼接 (任一 NULL 結果 NULL)`CONCAT('a', 'b')` → `'ab'`
CONCAT_WS(sep, ...)帶分隔符拼接 (跳過 NULL)`CONCAT_WS(',', 'a', NULL, 'c')` → `'a,c'`
REPLACE(str, from, to)替換`REPLACE('a b', ' ', '-')` → `'a-b'`
SOUNDEX(str)發音編碼 (模糊匹配)`SOUNDEX('Smith')` = `SOUNDEX('Smyth')`

二、日期時間處理函數

函數說明示例
NOW()當前日期時間`2024-01-15 14:30:00`
CURDATE()當前日期`2024-01-15`
CURTIME()當前時間`14:30:00`
DATE(expr)提取日期部分`DATE('2024-01-15 14:30:00')` → `'2024-01-15'`
TIME(expr)提取時間部分`TIME('2024-01-15 14:30:00')` → `'14:30:00'`
YEAR/MONTH/DAY(expr)提取年/月/日`MONTH('2024-01-15')` → `1`
HOUR/MINUTE/SECOND(expr)提取時/分/秒`HOUR('14:30:00')` → `14`
DATE_ADD(date, INTERVAL n UNIT)日期加減`DATE_ADD('2024-01-15', INTERVAL 7 DAY)` → `'2024-01-22'`
DATE_SUB(date, INTERVAL n UNIT)日期減法`DATE_SUB(NOW(), INTERVAL 1 MONTH)`
DATEDIFF(date1, date2)天數差 (date1 - date2)`DATEDIFF('2024-01-15', '2024-01-01')` → `14`
DATE_FORMAT(date, fmt)格式化輸出`DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i')`
STR_TO_DATE(str, fmt)字符串解析為日期`STR_TO_DATE('15/01/2024', '%d/%m/%Y')`
DAYOFWEEK(date)星期 (1=周日...7=周六)`DAYOFWEEK('2024-01-15')` → `2`
DAYOFYEAR(date)一年第幾天`DAYOFYEAR('2024-01-15')` → `15`
LAST_DAY(date)當月最後一天`LAST_DAY('2024-02-10')` → `'2024-02-29'`

三、日期查詢最佳實踐

查某一天數據 (正確 ✅)

SELECT * FROM orders 
WHERE DATE(order_date) = '2024-01-15';

-- 或範圍查詢 (可用索引)
SELECT * FROM orders 
WHERE order_date >= '2024-01-15' 
  AND order_date < '2024-01-16';

查某月數據 (正確 ✅)

SELECT * FROM orders 
WHERE order_date >= '2024-01-01' 
  AND order_date < '2024-02-01';

-- 或 (不可用索引)
SELECT * FROM orders 
WHERE YEAR(order_date) = 2024 AND MONTH(order_date) = 1;

錯誤寫法 ❌

WHERE order_date = '2024-01-15'  -- datetime 不會等於純日期字符串

四、數值處理函數

函數說明示例
ABS(x)絕對值`ABS(-5)` → `5`
CEIL(x) / CEILING(x)向上取整`CEIL(5.1)` → `6`
FLOOR(x)向下取整`FLOOR(5.9)` → `5`
ROUND(x, d)四捨五入保留 d 位小數`ROUND(5.678, 2)` → `5.68`
TRUNCATE(x, d)截斷保留 d 位 (不四捨五入)`TRUNCATE(5.678, 2)` → `5.67`
MOD(n, m) / n % m取模`MOD(10, 3)` → `1`
POW(x, y) / POWER(x, y)冪`POW(2, 3)` → `8`
SQRT(x)平方根`SQRT(16)` → `4`
RAND()0-1 隨機數`FLOOR(RAND() * 100)` → 0-99
PI()圓周率`PI()` → `3.141593`
SIN/COS/TAN(x)三角函數 (弧度制)`SIN(PI()/2)` → `1`
EXP(x)e^x`EXP(1)` → `2.718`
LOG(x) / LN(x)自然對數`LOG(10)` → `2.302`
LOG10(x)以 10 為底對數`LOG10(100)` → `2`
SIGN(x)符號 (-1/0/1)`SIGN(-5)` → `-1`

五、SOUNDEX 發音匹配實戰

-- 查找發音相似的姓名
SELECT * FROM users 
WHERE SOUNDEX(name) = SOUNDEX('Li Si');  -- 能匹配 'Lee Si', 'Li Xi' 等

適用於姓名/地址模糊檢索,但**不支援中文拼音**,中文需用全文索引/拼音分表。

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