系統整理 MySQL 高頻內置函數,附參數說明、返回值、示例。注意:函數移植性較弱,跨庫遷移需謹慎使用。
| 函數 | 說明 | 示例 | 結果 |
|---|---|---|---|
| CONCAT(s1,s2...) | 拼接字符串,任一參數為 NULL 則返回 NULL | CONCAT('M','y','sql') | Mysql |
| INSERT(s,pos,len,new) | 從 pos 起 len 字符替換為 new | INSERT('mysql learning',3,5,'miss you') | mymiss youearning |
| LOWER/UPPER | 大小寫轉換 | UPPER('aBcD') | ABCD |
| LEFT/RIGHT(s,n) | 左/右取 n 字符 | LEFT('algfdg',3) | alg |
| LPAD/RPAD(s,n,pad) | 左/右填充至長度 n | LPAD('5',3,'0') | 005 |
| LTRIM/RTRIM/TRIM | 去除左/右/兩側空格 | TRIM(' mysql ') | mysql |
| REPLACE(s,old,new) | 替換所有 old 為 new | REPLACE('這是mysql','mysql','oracle') | 這是oracle |
| STRCMP(s1,s2) | 比較:相等0,s1 | STRCMP('my','sql') | -1 |
| LENGTH/CHAR_LENGTH | 字節長度/字符數 | LENGTH('常建功')=6, CHAR_LENGTH=3(理論) | |
| FIND_IN_SET(s,list) | 在逗號列表中查找位置(從1開始) | FIND_IN_SET('mysql','I,love,mysql') | 3 |
| FIELD(s,s1,s2...) | 返回首個匹配參數位置 | FIELD('mysql','oracle','sql server','mysql') | 3 |
| LOCATE/POSITION/INSTR | 查找子串起始位置 | LOCATE('sql','mysql') | 3 |
| ELT(n,s1,s2...) | 返回第 n 個字符串 | ELT(1,'mysql','oracle') | mysql |
| MAKE_SET(bits,s1,s2...) | bits 二進制位為1則選擇對應字符串 | MAKE_SET(13,'a','b','c','d') → 1101 → a,c,d | a,c,d |
| SUBSTRING/MID(s,pos,len) | 截取子串 | SUBSTRING('algfdg',3,4) | gfdg |
| 函數 | 說明 | 示例 |
|---|---|---|
| ABS(x) | 絕對值 | ABS(-5)=5 |
| CEIL(x) | 向上取整 | CEIL(3.2)=4 |
| FLOOR(x) | 向下取整 | FLOOR(3.8)=3 |
| MOD(x,y) | 取模 | MOD(10,3)=1 |
| RAND() / RAND(seed) | 隨機數 0~1 / 固定種子 | RAND() |
| ROUND(x,d) | 四捨五入保留 d 位小數 | ROUND(3.1415,2)=3.14 |
| TRUNCATE(x,d) | 截斷保留 d 位小數(不四捨五入) | TRUNCATE(903.2432,2)=903.24; TRUNCATE(902.324534,-2)=900 |
NOW() / CURRENT_TIMESTAMP() / LOCALTIME() / SYSDATE():當前日期時間(推薦 NOW())。CURDATE() / CURRENT_DATE():當前日期。CURTIME() / CURRENT_TIME():當前時間。UNIX_TIMESTAMP():當前時間戳;UNIX_TIMESTAMP(date):指定時間轉時間戳。FROM_UNIXTIME(ts):時間戳轉日期時間。UTC_DATE()、UTC_TIME():國際協調時間(比本地時間早 8 小時)。| 函數 | 含義 | 示例 |
|---|---|---|
| YEAR/QAURTER/MONTH | 年/季度/月 | MONTH(NOW())=4 |
| MONTHNAME | 月份英文名 | MONTHNAME(NOW())=April |
| WEEK/WEEKOFYEAR | 第幾周(1-53) | WEEK(NOW())=17 |
| DAYOFMONTH/DAYOFYEAR | 月內/年內第幾天 | DAYOFMONTH(NOW())=30 |
| HOUR/MINUTE/SECOND | 時/分/秒 | HOUR(NOW())=7 |
| DAYNAME | 星期英文名 | DAYNAME(NOW())=Thursday |
| DAYOFWEEK | 星期幾(1=周日...7=周六) | DAYOFWEEK(NOW())=5 |
| WEEKDAY | 星期幾(0=周一...6=周日) | WEEKDAY(NOW())=3 |
| EXTRACT(unit FROM date) | 通用提取 | EXTRACT(HOUR_MINUTE FROM NOW())=814 |
EXTRACT 支持組合單位:SECOND_MICROSECOND、MINUTE_SECOND、HOUR_MINUTE、DAY_HOUR、YEAR_MONTH 等。
| 函數 | 說明 | 示例 |
|---|---|---|
| TO_DAYS(date) | 距 0000-01-01 天數 | TO_DAYS(NOW())=736083 |
| FROM_DAYS(n) | 從 0000-01-01 起 n 天后日期 | FROM_DAYS(736083+7)=2015-05-07 |
| DATEDIFF(d1,d2) | 兩日期相差天數 | DATEDIFF(NOW(),'2000-12-01')=5263 |
| ADDDATE/SUBDATE(date, n) | 加/減 n 天 | ADDDATE(CURDATE(),5)=2015-05-05 |
| ADDDATE/SUBDATE(date, INTERVAL expr unit) | 按單位加減 | ADDDATE(CURDATE(), INTERVAL '2,3' YEAR_MONTH)=2017-07-30 |
| ADDTIME/SUBTIME(time, expr) | 加/減時間 | ADDTIME(CURTIME(), 5*60)=5分鐘後 |
INTERVAL 單位:SECOND、MINUTE、HOUR、DAY、MONTH、YEAR、MINUTE_SECOND、HOUR_MINUTE、DAY_HOUR、YEAR_MONTH 等,expr 中分隔符任意。
| 函數 | 說明 | 示例 |
|---|---|---|
| VERSION() | 服務器版本 | 5.0.51b-community-nt-log |
| DATABASE() | 當前數據庫 | test3 |
| USER() | 當前用戶 | root@localhost |
| LAST_INSERT_ID() | 上條 INSERT 自增 ID | 0 (無自增操作) |