一、字符串函数
1、CONCAT(str1, str2, ...) 拼接多个字符串。
sql
SELECT CONCAT('Hello', ' ', 'World'); -- 输出 'Hello World'
2、SUBSTRING(str, start, length) 或 SUBSTR() 截取字符串。
sql
SELECT SUBSTRING('MySQL', 3, 2); -- 输出 'SQ'
3、LENGTH(str) 与 CHAR_LENGTH(str) 获取字符串的长度
LENGTH():返回字节数(受字符集影响);CHAR_LENGTH():返回字符数。
sql
SELECT LENGTH('中国'), CHAR_LENGTH('中国'); -- 输出 6(UTF-8)和 2
4、UPPER(str) / LOWER(str) 转换大小写
sql
SELECT UPPER('mysql'); -- 输出 'MYSQL'
5、REPLACE(str, old_str, new_str) 替换字符串
sql
SELECT REPLACE('apple pie', 'apple', 'cherry'); -- 输出 'cherry pie'
6、TRIM([LEADING|TRAILING|BOTH] 'char' FROM str) 去除首尾指定字符(默认去空格)
sql
SELECT TRIM(' MySQL '); -- 输出 'MySQL' 去除空格字符
- TRIM() #删除前后空格
- RTRIM() #删除字符串结尾空格
- LTRIM() #删除字符串起始空格
BOTH删除指定的首尾字符
sql
SELECT TRIM(BOTH 'a' FROM 'applea'); --结果pple
LEADING 删除指定的首字符
sql
SELECT TRIM(LEADING 'a' FROM 'applea'); --结果pplea
TRAILING删除指定的尾字符
sql
SELECT TRIM(TRAILING 'a' FROM 'applea'); --结果apple
二、时间函数
1、NOW() 返回当前日期和时间,格式 YYYY-MM-DD HH:MM:SS
sql
SELECT NOW(); -- 2023-10-25 14:30:45
2、CURDATE() 返回当前日期,格式 YYYY-MM-DD
sql
SELECT CURDATE(); -- 2023-10-25
3、CURTIME() 返回当前时间,格式 HH:MM:SS
sql
SELECT CURTIME(); -- 14:30:45
4、DATE() 仅存储日期(年-月-日),不包含时间。 YYYY-MM-DD(例如:2023-10-05)。
sql
CREATE TABLE example (event_date DATE);
INSERT INTO example VALUES ('2023-10-05');
5、TIME 仅存储时间(时:分:秒),可以表示一天中的时间点或时间间隔。
格式 HH:MM:SS(例如:15:30:00)。支持微秒:HH:MM:SS[.fraction](例如:15:30:00.123456)
sql
CREATE TABLE example (duration TIME);
INSERT INTO example VALUES ('15:30:00'), ('-05:00:00');
6、DATETIME() 存储日期 + 时间(年-月-日 时:分:秒)。
格式:YYYY-MM-DD HH:MM:SS(例如:2023-10-05 15:30:00)。支持微秒:YYYY-MM-DD HH:MM:SS[.fraction]。
sql
CREATE TABLE example (event_time DATETIME);
INSERT INTO example VALUES ('2023-10-05 15:30:00');
7、常用日期格式化符号
符号 | 含义 |
---|---|
%Y | 四位年份 |
%m | 两位月份 (01-12) |
%d | 两位日期 (01-31) |
%H | 24小时制小时 (00-23) |
%i: | 分钟 (00-59) |
%s: | 秒 (00-59) |
%W: | 星期全名 (Sunday-Saturday) |
%a: | 缩写星期 (Sun-Sat) |
%T | 24小时制时间(等价于 %H:%i:%s) |
%r | 12小时制时间(等价于 %h:%i:%s %p) |
%p | 上午/下午标记(AM/PM) |
8、日期/时间格式化,将日期转换成字符串格式
- DATE_FORMAT(date, format): 格式化日期,日期和时间部分
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 2023-10-25 14:30:45
SELECT DATE_FORMAT(NOW(), '%W, %M %e, %Y'); -- Wednesday, October 25, 2023
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H时%i分'); -- 2023年10月25日 14时30分
- TIME_FORMAT(time, format): 格式化时间(仅时间)(用法同 DATE_FORMAT)
sql
SELECT TIME_FORMAT('2023-10-01 08:30:00', '%T');
-- 输出: 08:30:00
9、STR_TO_DATE(str, format) 将字符串解析为日期
sql
SELECT STR_TO_DATE('25,10,2023', '%d,%m,%Y'); -- 2023-10-25
10、日期计算
- DATE_ADD(date, INTERVAL expr unit): 日期加法
sql
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); -- 当前时间加7天
SELECT DATE_ADD(NOW(), INTERVAL 3 MONTH); -- 当前时间加3个月
- DATE_SUB(date, INTERVAL expr unit): 日期减法
sql
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR); -- 当前时间减1小时
- DATEDIFF(date1, date2): 计算两个日期之间的天数差
sql
SELECT DATEDIFF('2023-10-31', '2023-10-25'); -- 6
其中unit 可选值如下YEAR、MONTH、DAY、HOUR、MINUTE、SECOND
11、提取日期部分
-
YEAR(date): 提取年份
-
MONTH(date): 提取月份
-
DAY(date): 提取日期
-
HOUR(time): 提取小时
-
MINUTE(time): 提取分钟
-
SECOND(time): 提取秒
-
EXTRACT(unit FROM date)
sql
SELECT EXTRACT(YEAR_MONTH FROM '2023-10-01'); -- 202310
mysql> SELECT EXTRACT(YEAR_MONTH FROM NOW());
+--------------------------------+
| EXTRACT(YEAR_MONTH FROM NOW()) |
+--------------------------------+
| 202504 |
+--------------------------------+
1 row in set (0.01 sec)
mysql>
mysql> SELECT EXTRACT(YEAR_MONTH FROM NOW());
+--------------------------------+
| EXTRACT(YEAR_MONTH FROM NOW()) |
+--------------------------------+
| 202504 |
+--------------------------------+
1 row in set (0.01 sec)
mysql>