來源:https://www.cnblogs.com/kissdodog/p/4168721.html
本文系統整理 MySQL 數學、字串、日期時間、條件判斷、系統資訊、加密、格式化/其他七大類函數,補充缺失範例,修正格式,供開發離線查閱。
| 函數 | 說明 | 範例 |
|---|---|---|
| ABS(x) | 絕對值 | SELECT ABS(-1) → 1 |
| CEIL/CEILING(x) | ≥x 的最小整數 | SELECT CEIL(1.5) → 2 |
| FLOOR(x) | ≤x 的最大整數 | SELECT FLOOR(1.5) → 1 |
| RAND() / RAND(seed) | 0~1 隨機數,種子固定序列可重現 | SELECT RAND(2) → 0.655... |
| SIGN(x) | 符號:負/零/正 → -1/0/1 | SELECT SIGN(-10) → -1 |
| PI() | 圓周率 | SELECT PI() → 3.141593 |
| TRUNCATE(x, y) | 截斷到 y 位小數(不四捨五入) | SELECT TRUNCATE(1.23456,3) → 1.234 |
| ROUND(x) / ROUND(x, y) | 四捨五入整數 / 保留 y 位 | SELECT ROUND(1.23456,3) → 1.235 |
| POW/POWER(x, y) | x 的 y 次方 | SELECT POW(2,3) → 8 |
| SQRT(x) | 平方根 | SELECT SQRT(25) → 5 |
| EXP(x) | e 的 x 次方 | SELECT EXP(3) → 20.0855 |
| MOD(x, y) | 餘數 | SELECT MOD(5,2) → 1 |
| LOG(x) / LOG10(x) | 自然對數 / 以 10 為底 | SELECT LOG(20.0855) → 3 |
| RADIANS/DEGREES | 角度⇄弧度 | SELECT RADIANS(180) → 3.14159 |
| SIN/COS/TAN/COT | 三角函數(弧度制) | SELECT SIN(RADIANS(30)) → 0.5 |
| ASIN/ACOS/ATAN/ATAN2 | 反三角函數 |
| 函數 | 說明 | 範例 |
|---|---|---|
| CHAR_LENGTH(s) | 字元數 | SELECT CHAR_LENGTH('你好123') → 5 |
| LENGTH(s) | 位元組長度 | SELECT LENGTH('你好123') → 9 (UTF-8) |
| CONCAT(s1,s2...) | 串聯 | SELECT CONCAT('12','34') → '1234' |
| CONCAT_WS(sep,s1,s2...) | 帶分隔符串聯 | SELECT CONCAT_WS('@','12','34') → '12@34' |
| INSERT(s1,pos,len,s2) | s1 從 pos 長度 len 替換為 s2 | SELECT INSERT('12345',1,3,'abc') → 'abc45' |
| UPPER/UCASE / LOWER/LCASE | 大/小寫轉換 | SELECT UPPER('abc') → 'ABC' |
| LEFT(s,n) / RIGHT(s,n) | 左/右 n 字元 | SELECT LEFT('abcde',2) → 'ab' |
| LPAD/RPAD(s1,len,s2) | 左/右填充 s2 至長度 len | SELECT LPAD('abc',5,'xx') → 'xxabc' |
| LTRIM/RTRIM/TRIM | 去左/右/兩側空格 | SELECT TRIM(' abc ') → 'abc' |
| TRIM(c FROM s) | 去兩側指定字元 c | SELECT TRIM('@' FROM '@@abc@@') → 'abc' |
| REPEAT(s,n) | 重複 n 次 | SELECT REPEAT('ab',3) → 'ababab' |
| SPACE(n) | n 個空格 | |
| REPLACE(s,old,new) | 替換所有 old 為 new | SELECT REPLACE('abc','a','x') → 'xbc' |
| STRCMP(s1,s2) | 比較:相等 0,s1 | |
| SUBSTRING/MID(s,pos,len) | 擷取子字串 | |
| LOCATE/POSITION/INSTR | 查找子字串位置 | SELECT LOCATE('b','abc') → 2 |
| REVERSE(s) | 反轉字串 | SELECT REVERSE('abc') → 'cba' |
| ELT(n,s1,s2...) | 返回第 n 個字串 | SELECT ELT(2,'a','b','c') → 'b' |
| EXPORT_SET(bits,on,off,sep,count) | 位掩碼轉字串 | SELECT EXPORT_SET(5,'Y','N',',',4) → 'Y,N,Y,N' |
| FIELD(s,s1,s2...) | 返回 s 在列表中位置 | SELECT FIELD('c','a','b','c') → 3 |
| FIND_IN_SET(s1,s2) | 逗號列表中查找位置 | |
| MAKE_SET(bits,s1,s2...) | 位掩碼對應字串集合 | SELECT MAKE_SET(1|4,'a','b','c') → 'a,c' |
| SUBSTRING_INDEX(s,delim,count) | 按分隔符切分取段 | SELECT SUBSTRING_INDEX('a*b*c','*',2) → 'a*b' count<0 從右數 |
| LOAD_FILE(path) | 讀取伺服器檔案(需 FILE 權限) |
| 函數 | 說明 | 範例 |
|---|---|---|
| NOW()/CURRENT_TIMESTAMP() | 當前日期時間 | 2014-12-17 15:59:02 |
| CURDATE()/CURRENT_DATE() | 當前日期 | 2014-12-17 |
| CURTIME()/CURRENT_TIME() | 當前時間 | 15:59:02 |
| UNIX_TIMESTAMP() / UNIX_TIMESTAMP(d) | 當前/指定時間轉時間戳 | SELECT UNIX_TIMESTAMP('2011-11-11 11:11:11') → 1320981071 |
| FROM_UNIXTIME(ts) | 時間戳轉日期時間 | SELECT FROM_UNIXTIME(1320981071) → 2011-11-11 11:11:11 |
| UTC_DATE/TIME | UTC 日期/時間 | 比 CST 慢 8 小時 |
| MONTH/MONTHNAME/DAYNAME | 月份數/名、星期名 | SELECT MONTHNAME('2011-11-11') → 'November' |
| DAYOFWEEK/WEEKDAY | 星期幾 (1=周日/0=周一) | SELECT DAYOFWEEK('2011-11-11') → 6 |
| WEEK/WEEKOFYEAR | 第幾周 (0-53) | SELECT WEEK('2011-11-11') → 45 |
| DAYOFYEAR/DAYOFMONTH | 第幾天/月第幾天 | SELECT DAYOFMONTH('2011-11-11') → 11 |
| QUARTER | 季度 (1-4) | SELECT QUARTER('2011-11-11') → 4 |
| HOUR/MINUTE/SECOND | 時/分/秒 | SELECT HOUR('1:2:3') → 1 |
| EXTRACT(unit FROM d) | 擷取指定單位 | unit: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR 等組合 |
| TIME_TO_SEC/SEC_TO_TIME | 時間⇄秒數 | SELECT TIME_TO_SEC('1:12:00') → 4320 |
| TO_DAYS/FROM_DAYS | 日期⇄公元元年天數 | SELECT TO_DAYS('0001-01-01') → 366 |
| DATEDIFF(d1,d2) | 日期差天數 | SELECT DATEDIFF('2001-01-01','2001-02-02') → -32 |
| DATE_ADD/ADDDATE(d, INTERVAL expr unit) | 日期加間隔 | SELECT ADDDATE('2011-11-11', INTERVAL 5 MINUTE) → '2011-11-11 11:16:11' |
| DATE_SUB/SUBDATE(d, INTERVAL expr unit) | 日期減間隔 | |
| ADDTIME/SUBTIME(t, n) | 時間加/減秒數 | SELECT ADDTIME('11:11:11',5) → '11:11:16' |
| DATE_FORMAT(d,fmt) / TIME_FORMAT(t,fmt) | 格式化輸出 | SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') |
| GET_FORMAT(type, locale) | 取得地區化格式字串 | SELECT GET_FORMAT(DATE,'USA') → '%m.%d.%Y' |
SELECT IF(1>0,'對','錯') → '對'SELECT IFNULL(NULL,'Hello') → 'Hello'CASE WHEN e1 THEN v1 WHEN e2 THEN v2 ... ELSE vn END
SELECT CASE WHEN 1>0 THEN '1>0' WHEN 2>0 THEN '2>0' ELSE '3>0' END → '1>0'
CASE expr WHEN e1 THEN v1 WHEN e2 THEN v2 ... ELSE vn END
SELECT CASE 1 WHEN 1 THEN '我是1' WHEN 2 THEN '我是2' ELSE '其他' END → '我是1'
| 函數 | 說明 |
|---|---|
| VERSION() | 伺服器版本 |
| CONNECTION_ID() | 當前連線 ID |
| DATABASE()/SCHEMA() | 當前資料庫 |
| USER()/SYSTEM_USER()/CURRENT_USER() | 當前用戶 |
| CHARSET(str)/COLLATION(str) | 字元集/排序規則 |
| LAST_INSERT_ID() | 最後自增 ID |
SELECT PASSWORD('123') → *23AE809DDACAF96AF0FD78ED04B6A265E05AA257SELECT MD5('123') → 202cb962ac59075b964b07152d234b70SELECT ENCODE('123','xxoo') → 二進位; SELECT DECODE(...,'xxoo') → '123'SELECT FORMAT(3.1415926,3) → '3.142'ASCII(s)、BIN(x)、HEX(x)、OCT(x)、CONV(x, from, to)INET_ATON('192.168.0.1') → 3232235521;INET_NTOA(3232235521) → '192.168.0.1'GET_LOCK(name, timeout) 取得命名鎖;RELEASE_LOCK(name) 釋放;IS_FREE_LOCK(name) 檢查。SELECT BENCHMARK(10000, NOW()) → 0CONVERT(s USING charset)。SELECT CHARSET(CONVERT('ABC' USING gbk)) → 'gbk'CAST(x AS type) / CONVERT(x, type)。支援 BINARY, CHAR, DATE, DATETIME, TIME, SIGNED, UNSIGNED。SELECT CAST('123' AS UNSIGNED) + 1 → 124註:MySQL 8.0 新增窗口函數(ROW_NUMBER, LAG, LEAD...)、CTE、JSON 函數、空間函數等,建議配合官方文檔學習。