MySQL常用日期查询语句汇总与实战指南

木白
木白
发布时间:2026-10-14 | 6人浏览过
原创

在数据分析与业务系统中,按时间维度筛选记录是高频操作。本文详细整理了MySQL中最常用的日期查询语法,包括利用 DATE_FORMAT 进行格式化匹配,以及使用内置时间函数实现精确的时间区间过滤,助您快速应对各类统计需求。

基于 DATE_FORMAT 的格式化查询

DATE_FORMAT() 是 MySQL 中处理日期最直观的函数之一,它将日期对象转换为指定格式的字符串,便于直接比较。在使用时需注意,比较的值必须严格包裹在单引号中,否则可能导致查询失效或产生意外的类型转换错误。

第1步:按月筛选数据

若需提取特定月份的数据(如 "2013-03"),可直接对比格式化后的年月字符串:

SELECT * FROM `ler_items` WHERE DATE_FORMAT(postTime,'%Y-%m')='2013-03';

第2步:格式化计算出的日期值

当需要展示过去某段时间的格式化结果时(例如显示7天前的日期格式为 "yy-mm-dd"):

SELECT date_format(DATE_SUB(CURDATE(), INTERVAL 7 DAY),'%y%m%d');
-- 输出示例: 120416

这里 DATE_SUB() 负责时间的数学运算,date_format() 负责最终的样式呈现。

近期数据筛选(今天、昨天、近N天)

对于“当天”或“前一天”的业务逻辑,推荐使用以下基于日差值的函数,它们比字符串比较更具语义性。

  • 查询今天的数据:利用 to_days() 将日期和当前时间转为天数整数进行比对。
SELECT * FROM 表名 WHERE to_days(时间字段名) = to_days(now());
  • 查询昨天的数据:判断当前日期对应的天数与字段天数之差小于等于1。
SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段名) <= 1;
  • 查询近7天的数据:使用 DATE_SUB() 获取7天前的基准时间。
SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名);

月度与季度统计查询

在生成月度报表时,通常需要忽略具体的日时分秒,只关注年月或季度信息。

第3步:本月与上一月的界定

当月数据:

SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m');

上一个月数据:通过计算两个日期在 %Y%m 格式下的间隔月数是否为1来判定。

SELECT * FROM 表名 
WHERE PERIOD_DIFF(date_format(now(), '%Y%m'), date_format(时间字段名, '%Y%m')) = 1;

此外,也可以使用更直观的逻辑,判断该字段是否落在上个月的起止时间内:

SELECT * FROM enterprise 
WHERE date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');

第4步:本季度与上季度的定位

本季度数据:

SELECT * FROM `ht_invoice_information` 
WHERE QUARTER(create_date) = QUARTER(now());

上季度数据:

SELECT * FROM `ht_invoice_information` 
WHERE QUARTER(create_date) = QUARTER(DATE_SUB(now(), INTERVAL 1 QUARTER));

年度与周维度的特殊查询

跨年分析需要用到 YEAR() 和 DATE_SUB,而在处理按周统计的需求时,YEARWEEK() 是最关键的函数,它能同时锁定年份和周数,避免跨年的问题。

第5步:本周与上周的数据提取

查询当前这周的数据(包含跨年自动适配):

SELECT name, submittime 
FROM enterprise 
WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());

查询上周的数据:

SELECT name, submittime 
FROM enterprise 
WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now()) - 1;

第6步:跨年与特定年份区间

本年数据:

SELECT * FROM `ht_invoice_information` 
WHERE YEAR(create_date) = YEAR(NOW());

距离当前现在6个月的数据:常用于查看近期的活跃趋势。

SELECT name, submittime 
FROM enterprise 
WHERE submittime BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW();

总结

以上关于MySQL日期查询的详细方法涵盖了日常开发中80%以上的统计需求。核心在于理解 DATE_FORMAT 用于展示和简单文本匹配,而 INTERVAL 和 QUARTER/YEARWEEK 等函数则适用于复杂的时间轴运算。以上就是MySQL常用日期查询语句汇总与实战指南的详细内容,更多关于MySQL函数的技术资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表