DATE_FORMAT()
函数作用:将日期/时间值格式化为字符串。
常用格式符:
%Y
:4位年份(如 2023)%y
:2位年份(如 23)%m
:两位月份(01~12)%d
:两位日期(01~31)%H
:24小时制小时(00~23)%i
:分钟(00~59)%s
:秒(00~59)%W
:星期名称(如 Monday)%a
:缩写星期(如 Mon)示例:
SELECT
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_datetime,
DATE_FORMAT('2023-10-05 14:30:00', '%W, %M %Y') AS readable_date;
输出:
formatted_datetime | readable_date
-----------------------|------------------
2023-10-05 14:30:00 | Thursday, October 2023
STR_TO_DATE()
函数作用:将字符串转换为日期/时间类型。
示例:
SELECT STR_TO_DATE('05-10-2023', '%d-%m-%Y') AS date_from_string;
输出:
date_from_string
----------------
2023-10-05
UNIX_TIMESTAMP()
与 FROM_UNIXTIME()
UNIX_TIMESTAMP()
:将日期转为 Unix 时间戳(秒级)。FROM_UNIXTIME()
:将 Unix 时间戳转为日期。SELECT
UNIX_TIMESTAMP('2023-10-05 00:00:00') AS timestamp,
FROM_UNIXTIME(1696464000) AS formatted_date;
输出:
timestamp | formatted_date
-------------|-------------------
1696464000 | 2023-10-05 00:00:00
-- 查询 2023 年 10 月之后的订单
SELECT * FROM orders
WHERE order_time >= '2023-10-01 00:00:00';
DATEDIFF()
计算日期差作用:返回两个日期相差的天数。
SELECT DATEDIFF('2023-10-10', '2023-10-05') AS day_diff;
输出:
day_diff
--------
5
TIMESTAMPDIFF()
计算差值作用:按单位(秒、分钟、小时、天等)计算时间差。
单位参数:SECOND
, MINUTE
, HOUR
, DAY
, MONTH
, YEAR
。
SELECT
TIMESTAMPDIFF(HOUR, '2023-10-05 08:00:00', '2023-10-05 20:30:00') AS hour_diff,
TIMESTAMPDIFF(MONTH, '2023-01-01', '2023-10-01') AS month_diff;
输出:
hour_diff | month_diff
----------|-----------
12 | 9
DATE_ADD()
和 DATE_SUB()
作用:对日期进行加减操作。
-- 查询 7 天前的日期
SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY) AS last_week;
-- 查询 3 小时后的时间
SELECT DATE_ADD(NOW(), INTERVAL 3 HOUR) AS future_time;
BETWEEN
筛选时间范围-- 查询 2023 年 10 月的订单
SELECT * FROM orders
WHERE order_time BETWEEN '2023-10-01' AND '2023-10-31 23:59:59';
SELECT
DATE_FORMAT(order_time, '%Y-%m-%d') AS order_date,
COUNT(*) AS order_count
FROM orders
WHERE order_time >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY order_date
ORDER BY order_date;
SELECT
user_id,
DATEDIFF(MAX(last_login), MIN(register_time)) AS active_days
FROM user_activity
GROUP BY user_id;
SET time_zone = '+8:00';
调整。WHERE DATE(order_time) = ...
),可能导致索引失效。DATETIME(6)
)的影响。通过上述方法,可高效处理 MySQL 中的时间格式化和比较需求。