MySQL日期函数的详细教程(包含常用函数及其示例)

发布于:2025-05-01 ⋅ 阅读:(50) ⋅ 点赞:(0)

概述

  • 以下是一个关于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-DDYYYYMMDD,否则返回NULL

• 处理跨月/年时注意边界情况(如2023-01-31 + INTERVAL 1 MONTH结果为2023-02-28)。

• 使用TIMESTAMP类型可存储更精确的时间(包含时区支持)。

通过掌握这些函数,您可以高效处理MySQL中的日期和时间数据!


网站公告

今日签到

点亮在社区的每一天
去签到