適用上下文
SELECT、WHERE、ORDER BY、HAVING、UPDATE、DELETE、存儲程序/函數/觸發器。
一、字符串函數
| 函數 | 示例 | 結果/說明 |
CONCAT(str1,str2,...) | CONCAT('a','b') | 'ab',任一參數為 NULL 則結果 NULL |
CONCAT_WS(sep,str1,...) | CONCAT_WS(',','a','b') | 'a,b',跳過 NULL,首參為分隔符 |
INSERT(str,pos,len,newstr) | INSERT('abcdef',2,3,'XX') | 'aXXef',位置從 1 開始 |
LOWER/UPPER(str) | UPPER('abc') | 'ABC' / 'abc' |
LEFT/RIGHT(str,len) | LEFT('abcde',2) | 'ab' / 'de' |
LPAD/RPAD(str,len,pad) | LPAD('42',5,'0') | '00042' / '42000' |
TRIM/LTRIM/RTRIM(str) | TRIM(' ab ') | 'ab',去除首尾/左/右空格 |
REPLACE(str,from,to) | REPLACE('a,b,c',',',';') | 'a;b;c',全量替換 |
STRCMP(s1,s2) | STRCMP('a','b') | -1/0/1,按字典序比較 |
SUBSTRING(str,pos,len) | SUBSTRING('abcde',2,3) | 'bcd' |
LOCATE(substr,str) | LOCATE('b','abc') | 2,首次出現位置,不存在返回 0 |
二、數值函數
| 函數 | 示例 | 結果 |
ABS(x) | ABS(-5) | 5 |
CEIL/CEILING(x) | CEIL(2.1) | 3(向上取整) |
FLOOR(x) | FLOOR(2.9) | 2(向下取整) |
MOD(x,y) | MOD(10,3) | 1 |
RAND() | RAND() | 0~1 隨機浮點數 |
ROUND(x,d) | ROUND(1.235,2) | 1.24(四捨五入) |
TRUNCATE(x,d) | TRUNCATE(1.239,2) | 1.23(截斷,不四捨五入) |
POW(x,y) | POW(2,3) | 8 |
SQRT(x) | SQRT(16) | 4 |
三、日期時間函數
| 函數 | 示例 | 說明 |
CURDATE() | CURDATE() | 當前日期 'YYYY-MM-DD' |
NOW()/SYSDATE() | NOW() | 當前日期時間 'YYYY-MM-DD HH:MM:SS' |
CURTIME() | CURTIME() | 當前時間 'HH:MM:SS' |
UNIX_TIMESTAMP(dt) | UNIX_TIMESTAMP(NOW()) | Unix 時間戳(秒) |
FROM_UNIXTIME(ts) | FROM_UNIXTIME(1700000000) | 時間戳轉日期時間 |
DATE_FORMAT(dt,fmt) | DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') | 自定義格式輸出 |
YEAR/MONTH/DAY/HOUR/MINUTE/SECOND(dt) | MONTH(NOW()) | 提取對應部分 |
DATEDIFF(d1,d2) | DATEDIFF('2024-01-01','2023-01-01') | 天數差 |
DATE_ADD/DATE_SUB(dt,INTERVAL expr unit) | DATE_ADD(NOW(),INTERVAL 1 DAY) | 日期加減運算 |
四、流程控制函數
-- IF(條件,真值,假值)
SELECT IF(score>=60,'及格','不及格') FROM exam;
-- IFNULL(值1,值2) 值1非NULL返回值1,否則值2
SELECT IFNULL(bonus,0) FROM salary;
-- CASE WHEN ... THEN ... ELSE ... END
SELECT CASE
WHEN salary<3000 THEN '低'
WHEN salary<6000 THEN '中'
ELSE '高'
END AS level FROM emp;
-- CASE expr WHEN val THEN ... ELSE ... END
SELECT CASE status WHEN 1 THEN '啟用' WHEN 0 THEN '禁用' ELSE '未知' END FROM user;
五、其他實用函數
| 函數 | 用途 |
DATABASE() | 當前默認數據庫 |
VERSION() | 服務器版本 |
USER()/CURRENT_USER() | 當前連接用戶 |
INET_ATON('192.168.1.1') | IP 轉整數 3232235777 |
INET_NTOA(3232235777) | 整數轉 IP |
MD5(str) | MD5 哈希(不建議密碼存儲) |
SHA1/SHA2(str,256) | SHA 哈希 |
UUID() | 生成 UUID |
BENCHMARK(count,expr) | 性能測試 |