MySQL日期函数的详细教程(包含常用函数及其示例)
概述
- 以下是一个关于MySQL日期函数的详细教程,包含常用函数及其示例
- 内容以转换为PDF电子书,喜欢的朋友可以转存慢慢享用:
https://pan.quark.cn/s/57d2e491bbbe
1. 获取当前日期和时间
• CURDATE() / CURRENT_DATE()
返回当前日期(格式:‘YYYY-MM-DD’)。
SELECT CURDATE(); -- 输出:2023-10-25
• CURTIME() / CURRENT_TIME()
返回当前时间(格式:‘HH:MM:SS’)。
SELECT CURTIME(); -- 输出:14:30:45
• NOW() / SYSDATE()
返回当前日期和时间(格式:‘YYYY-MM-DD HH:MM:SS’)。
SELECT NOW(); -- 输出:2023-10-25 14:30:45
2. 提取日期/时间的部分
• YEAR(date) / MONTH(date) / DAY(date)
提取年、月、日。
SELECT YEAR('2023-10-25'); -- 输出:2023
SELECT MONTH('2023-10-25'); -- 输出:10
SELECT DAY('2023-10-25'); -- 输出:25
• HOUR(time) / MINUTE(time) / SECOND(time)
提取时、分、秒。
SELECT HOUR('14:30:45'); -- 输出:14
• DAYNAME(date)
返回星期名称(如 Monday)。
SELECT DAYNAME('2023-10-25'); -- 输出:Wednesday
• DAYOFWEEK(date)
返回星期索引(1=周日,7=周六)。
SELECT DAYOFWEEK('2023-10-25'); -- 输出:4(对应周三)
• WEEK(date [, mode])
返回一年中的第几周。
SELECT WEEK('2023-10-25'); -- 输出:43
3. 日期格式化
• DATE_FORMAT(date, format)
自定义日期显示格式。
SELECT DATE_FORMAT(NOW(), '%W, %M %d %Y'); -- 输出:Wednesday, October 25 2023
常用格式符号:
• %Y
: 四位年份
• %y
: 两位年份
• %M
: 月份名称(January)
• %m
: 两位月份
• %d
: 两位日期
• %H
: 24小时制小时
• %p
: AM/PM
• STR_TO_DATE(str, format)
将字符串转为日期。
SELECT STR_TO_DATE('25,10,2023', '%d,%m,%Y'); -- 输出:2023-10-25
4. 日期计算
• DATE_ADD(date, INTERVAL expr unit)
添加时间间隔。
SELECT DATE_ADD('2023-10-25', INTERVAL 7 DAY); -- 输出:2023-11-01
• DATE_SUB(date, INTERVAL expr unit)
减去时间间隔。
SELECT DATE_SUB('2023-10-25', INTERVAL 1 MONTH); -- 输出:2023-09-25
• DATEDIFF(date1, date2)
计算两个日期相差的天数。
SELECT DATEDIFF('2023-10-25', '2023-10-20'); -- 输出:5
• TIMESTAMPDIFF(unit, start, end)
返回两个日期相差的单位数(年、月、日等)。
SELECT TIMESTAMPDIFF(MONTH, '2023-01-01', '2023-10-25'); -- 输出:9
5. 其他实用函数
• LAST_DAY(date)
返回月份的最后一天。
SELECT LAST_DAY('2023-02-15'); -- 输出:2023-02-28
• EXTRACT(unit FROM date)
提取日期的部分(标准SQL语法)。
SELECT EXTRACT(YEAR FROM '2023-10-25'); -- 输出:2023
6. 实际应用示例
• 查询今天的数据:
SELECT * FROM orders WHERE order_date = CURDATE();
• 查询最近7天的数据:
SELECT * FROM logs
WHERE log_time BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW();
• 计算年龄:
SELECT name, TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) AS age FROM users;
• 格式化日期为季度显示:
SELECT CONCAT('Q', QUARTER(order_date), ' ', YEAR(order_date)) AS quarter
FROM orders;
注意事项
• 日期格式需符合YYYY-MM-DD
或YYYYMMDD
,否则返回NULL
。
• 处理跨月/年时注意边界情况(如2023-01-31 + INTERVAL 1 MONTH
结果为2023-02-28
)。
• 使用TIMESTAMP
类型可存储更精确的时间(包含时区支持)。
通过掌握这些函数,您可以高效处理MySQL中的日期和时间数据!