MySQL 日期格式化是一个非常重要且常用的功能。下面我为您提供一份从基础到高级的完整指南。
DATE_FORMAT()
是 MySQL 中最主要的日期格式化函数。
基本语法:
DATE_FORMAT(date, format)
date
:要格式化的日期/时间值format
:定义输出格式的格式字符串
符号 |
说明 |
示例 |
|
4位年份 |
2024 |
|
2位年份 |
24 |
|
月份(01-12) |
04 |
|
月份(1-12) |
4 |
|
月份英文名 |
April |
|
月份英文缩写 |
Apr |
|
日期(01-31) |
15 |
|
日期(1-31) |
15 |
|
英文序数 |
15th |
|
星期英文名 |
Monday |
|
星期英文缩写 |
Mon |
符号 |
说明 |
示例 |
|
24小时制(00-23) |
14 |
|
12小时制(01-12) |
02 |
|
12小时制(01-12) |
02 |
|
分钟(00-59) |
30 |
|
秒(00-59) |
45 |
|
微秒 |
123456 |
|
AM/PM |
PM |
符号 |
说明 |
示例 |
|
24小时时间 |
14:30:45 |
|
12小时时间 |
02:30:45 PM |
|
星期数字(0=周日) |
1 |
|
周数(周日开始) |
15 |
|
周数(周一开始) |
15 |
|
一年中的第几天 |
105 |
SELECT
DATE_FORMAT(NOW(), '%Y-%m-%d') as date_standard, -- 2024-04-15
DATE_FORMAT(NOW(), '%d/%m/%Y') as european_date, -- 15/04/2024
DATE_FORMAT(NOW(), '%m/%d/%Y') as us_date, -- 04/15/2024
DATE_FORMAT(NOW(), '%Y年%m月%d日') as chinese_date; -- 2024年04月15日
SELECT
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') as datetime_full, -- 2024-04-15 14:30:45
DATE_FORMAT(NOW(), '%W, %M %D, %Y') as readable_date, -- Monday, April 15th, 2024
DATE_FORMAT(NOW(), '%b %d, %Y at %h:%i %p') as friendly_time; -- Apr 15, 2024 at 02:30 PM
SELECT
DATE_FORMAT(NOW(), '%H:%i') as time_24h, -- 14:30
DATE_FORMAT(NOW(), '%h:%i %p') as time_12h, -- 02:30 PM
DATE_FORMAT(NOW(), '%T') as time_full; -- 14:30:45
SELECT
DATE_FORMAT(NOW(), '%Y-Q%q') as quarter, -- 2024-Q2
DATE_FORMAT(NOW(), 'Week %U of %Y') as week_num; -- Week 15 of 2024
-- 按年月分组统计订单
SELECT
DATE_FORMAT(order_date, '%Y-%m') as month_group,
COUNT(*) as order_count,
SUM(amount) as total_amount
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY month_group;
-- 用户注册时间格式化
SELECT
username,
DATE_FORMAT(created_at, '%M %D, %Y') as join_date,
DATE_FORMAT(created_at, 'Joined %b %Y') as short_join_date
FROM users;
-- 系统日志时间戳格式化
SELECT
log_id,
DATE_FORMAT(log_time, '%Y-%m-%d %H:%i:%s') as log_datetime,
message
FROM system_logs
WHERE DATE_FORMAT(log_time, '%Y-%m-%d') = '2024-04-15';
SELECT TIME_FORMAT(NOW(), '%H:%i:%s') as current_time; -- 14:30:45
SELECT STR_TO_DATE('15/04/2024', '%d/%m/%Y') as date_value; -- 2024-04-15
SELECT STR_TO_DATE('02:30 PM', '%h:%i %p') as time_value; -- 14:30:00
SELECT
FROM_UNIXTIME(1713174645) as normal_date, -- 2024-04-15 14:30:45
DATE_FORMAT(FROM_UNIXTIME(1713174645), '%Y-%m-%d %H:%i') as formatted_date; -- 2024-04-15 14:30
-- 根据日期自动显示季度信息
SELECT
order_date,
CASE
WHEN DATE_FORMAT(order_date, '%m') IN ('01','02','03') THEN DATE_FORMAT(order_date, '%Y-Q1')
WHEN DATE_FORMAT(order_date, '%m') IN ('04','05','06') THEN DATE_FORMAT(order_date, '%Y-Q2')
WHEN DATE_FORMAT(order_date, '%m') IN ('07','08','09') THEN DATE_FORMAT(order_date, '%Y-Q3')
ELSE DATE_FORMAT(order_date, '%Y-Q4')
END as quarter
FROM orders;
-- 使用SET lc_time_names支持多语言
SET lc_time_names = 'zh_CN'; -- 设置为中文
SELECT DATE_FORMAT(NOW(), '%M %d, %Y') as chinese_month; -- 四月 15, 2024
SET lc_time_names = 'ja_JP'; -- 设置为日文
SELECT DATE_FORMAT(NOW(), '%M %d, %Y') as japanese_month; -- 4月 15, 2024
-- 查询今天的数据
SELECT * FROM logs
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d');
-- 查询本月的数据
SELECT * FROM orders
WHERE DATE_FORMAT(order_date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m');
不推荐:
SELECT * FROM orders
WHERE DATE_FORMAT(order_date, '%Y-%m-%d') = '2024-04-15';
推荐:
SELECT * FROM orders
WHERE order_date >= '2024-04-15' AND order_date < '2024-04-16';
-- 创建包含格式化日期的视图
CREATE VIEW order_summary AS
SELECT
order_id,
order_date,
DATE_FORMAT(order_date, '%Y-%m') as order_month,
DATE_FORMAT(order_date, '%Y-Q%q') as order_quarter
FROM orders;
SELECT
DATE_FORMAT(COALESCE(order_date, NOW()), '%Y-%m-%d') as safe_date
FROM orders;
SELECT
DATE_FORMAT(CONVERT_TZ(NOW(), '+00:00', '+08:00'), '%Y-%m-%d %H:%i:%s') as beijing_time;
-- 生成最近7天的日期列表
SELECT
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL n DAY), '%Y-%m-%d') as date_list
FROM (
SELECT 0 as n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
) numbers;
场景 |
推荐格式 |
示例 |
标准日期 |
|
2024-04-15 |
中文日期 |
|
2024年04月15日 |
完整时间 |
|
2024-04-15 14:30:45 |
友好显示 |
|
April 15th, 2024 at 02:30 PM |
报表分组 |
|
2024-04 或 2024-Q2 |
掌握这些日期格式化技巧,能够让你在数据库查询、报表生成和应用程序开发中更加得心应手。记得根据具体需求选择合适的格式,并注意性能优化。
另外搭配便捷的80kmMYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。