MySQL 函數可用於 SELECT、UPDATE、DELETE 等陳述式中,主要分為四大類:字串、數值、日期時間、系統資訊。
CONCAT(s1, s2, ..., sn) -- 任一參數為 NULL 則回傳 NULL CONCAT_WS(sep, s1, s2, ..., sn) -- 以 sep 分隔,忽略 NULL 參數
範例:
SELECT CONCAT('my','s','ql'); -- 'mysql'
SELECT CONCAT('my','s','ql', NULL); -- NULL
SELECT CONCAT_WS('-', '020', '87658907'); -- '020-87658907'
SELECT CONCAT_WS('-', '020', NULL, '87658907'); -- '020-87658907' (忽略中間 NULL)
STRCMP(str1, str2) -- str1>str2 回傳 1;相等 0;str11.3 長度計算:LENGTH() 與 CHAR_LENGTH()
LENGTH(str) -- 位元組長度 CHAR_LENGTH(str) -- 字元數 (中文每字 3-4 bytes,但字元數為 1)1.4 大小寫轉換:UPPER()/UCASE()、LOWER()/LCASE()
1.5 字串查找與定位
FIND_IN_SET(str, strlist):在逗號分隔列表中查找位置FIELD(str, str1, str2...):在參數列表中查找首次匹配位置LOCATE(sub, str)、POSITION(sub IN str)、INSTR(str, sub):返回子串起始位置ELT(n, str1, str2...):返回第 n 個字串MAKE_SET(bits, str1, str2...):根據位元值選擇字串組合1.6 子串截取
LEFT(str, n)、RIGHT(str, n):左右截取SUBSTRING(str, pos, len)、MID(str, pos, len):指定位置長度截取1.7 去除空白:LTRIM()、RTRIM()、TRIM()
1.8 字串替換:INSERT()、REPLACE()
INSERT(str, pos, len, newstr) -- 位置替換 REPLACE(str, oldsub, newsub) -- 內容替換2. 數值函數
2.1 隨機數:RAND()、RAND(seed)
2.2 取整:CEIL() (向上)、FLOOR() (向下)
2.3 截取小數:TRUNCATE(x, d)
2.4 四捨五入:ROUND(x)、ROUND(x, d)
3. 日期時間函數
3.1 取得當前日期時間
NOW()、CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE():日期+時間 (推薦 NOW())CURDATE()、CURRENT_DATE():僅日期CURTIME()、CURRENT_TIME():僅時間3.2 日期時間分量提取
YEAR(), QUARTER(), MONTH(), MONTHNAME(), WEEK(), WEEKOFYEAR() DAYOFMONTH(), DAYOFYEAR(), DAYOFWEEK(), WEEKDAY(), DAYNAME() HOUR(), MINUTE(), SECOND() EXTRACT(type FROM date) -- type: YEAR/MONTH/DAY/HOUR/MINUTE/SECOND3.3 日期運算
TO_DAYS(date)、FROM_DAYS(n):基準日 (0000-01-01) 運算DATEDIFF(date1, date2):兩日期差天數ADDDATE(date, n)、SUBDATE(date, n):加減天數ADDDATE(date, INTERVAL expr type)、SUBDATE(date, INTERVAL expr type):加減間隔 (YEAR_MONTH 等)ADDTIME(time, sec)、SUBTIME(time, sec):加減秒數4. 系統資訊函數
VERSION() -- 伺服器版本 DATABASE() -- 當前資料庫 USER() -- 當前用戶 LAST_INSERT_ID() -- 最後自增 ID熟練掌握這些函數,能讓 SQL 查詢更簡潔高效,減少應用層資料處理邏輯。