当前位置: 首页 > 编程笔记 >

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

全彬
2023-03-14
本文向大家介绍mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句,包括了mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句的使用技巧和注意事项,需要的朋友参考一下

mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法分析总结:
话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下:


select * from `article` where date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d');

或者:


select * from `article` where to_days(date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d')) = to_days(now());


假设以上表的add_time字段的存储类型是DATETIME类型或者TIMESTAMP类型,则查询语句也可按如下写法:
查询今天的信息记录:

select * from `article` where to_days(`add_time`) = to_days(now());


查询昨天的信息记录:

select * from `article` where to_days(now()) – to_days(`add_time`) <= 1;


查询近7天的信息记录:

select * from `article` where date_sub(curdate(), INTERVAL 7 DAY) <= date(`add_time`);


查询近30天的信息记录:

select * from `article` where date_sub(curdate(), INTERVAL 30 DAY) <= date(`add_time`);


查询本月的信息记录:

select * from `article` where date_format(`add_time`, ‘%Y%m') = date_format(curdate() , ‘%Y%m');


查询上一月的信息记录:

select * from `article` where period_diff(date_format(now() , ‘%Y%m') , date_format(`add_time`, ‘%Y%m')) =1;


对上面的SQL语句中的几个函数做一下分析:
(1)to_days
就像它的名字一样,它是将具体的某一个日期或时间字符串转换到某一天所对应的unix时间戳,如:


mysql> select  to_days('2010-11-22 14:39:51');      

 +--------------------------------+                                                        

| to_days('2010-11-22 14:39:51') |

+--------------------------------+

|                         734463 |

+--------------------------------+

mysql> select  to_days('2010-11-23 14:39:51'); +--------------------------------+ | to_days('2010-11-23 14:39:51') | +--------------------------------+ |                         734464 | +--------------------------------+

可以看出22日与23日的差别就是,转换之后的数增加了1,这个粒度的查询是比较粗糙的,有时可能不能满足我们的查询要求,那么就需要使用细粒度的查询方法str_to_date函数了,下面将分析这个函数的用法。

提醒:
(1)to_days() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。因此对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。
 
(2)MySQL"日期和时间类型"中的规则是将日期中的二位数年份值转化为四位。因此对于'1997-10-07'和'97-10-07'将被视为同样的日期:


mysql> select to_days('1997-10-07'), to_days('97-10-07'); 

    -> 729669, 729669

(2)str_to_date
这个函数可以把字符串时间完全的翻译过来,如:


mysql> select str_to_date("2010-11-23 14:39:51",'%Y-%m-%d %H:%i:%s');

 

+--------------------------------------------------------+

| str_to_date("2010-11-23 14:39:51",'%Y-%m-%d %H:%i:%s') |

+--------------------------------------------------------+

| 2010-11-23 14:39:51                                    |

+--------------------------------------------------------+


具体案例操作如下:


select str_to_date(article.`add_time`,'%Y-%m-%d %H:%i:%s')

from article

where str_to_date(article.`add_time`,'%Y-%m-%d %H:%i:%s')>='2012-06-28 08:00:00' and str_to_date(article.`add_time`,'%Y-%m-%d %H:%i:%s')<='2012-06-28 09:59:59';

 类似资料:
  • 我想要功能,但是当日期接近时,它太精确了——例如。我不想让它显示“3小时内”,而是“今天”——所以基本上是“每日”精度。 我试着使用函数,如果日期差超过1天,则不格式化

  • 问题内容: 我在这里阅读了一些帖子,似乎没什么特别的,但是我仍然不能选择最后几天的条目。 如果我在今天和过去7天之间添加,则我的代码将不会输出任何内容。 问题答案: 该子句放错了位置,它必须遵循表引用和JOIN操作。 像这样: 编辑 (三三年后) 上面的内容基本上回答了以下问题:“我试图在查询中添加WHERE子句,但现在查询返回错误,我该如何解决?” 关于写一个检查“过去7天”日期范围的条件的问题

  • 问题内容: 我的网站的命中SQL表格名为ExternalHits。我将URL跟踪为URLx,将访问页面的日期跟踪为Datex。我每周运行一次此查询,以获取前一周的总点击数,并且每周我都必须手动更改“之间”的日期。有什么方法可以更改查询,以使“之间”的日期类似于TODAY AND TODAY-7?我只是不想不必每周手动更改日期。 问题答案:

  • 问题内容: 我想返回最近30天内添加到数据库中的所有记录。由于显示目的,我需要将日期转换为mm / dd / yy。 我的陈述未能将记录限制为最近30天-它选择了所有记录。 谁能指出我正确的方向?感觉就像我接近了。 谢谢,祝你度过愉快的一周。 问题答案: 您需要在子句而不是子句中应用: 另请注意,该查询仅返回日期的一部分,因此,如果您将“ a” 存储为时间部分,则此查询将不会选择今天的记录。 在这

  • 问题内容: 亲爱的专业人员, 我有一个查询来获取本月的第一天和最后一天,但是我对本月第一天的时间戳有疑问。 自2015年2月起,我希望获得以下结果: @LastDOM是正确的,但是我没有得到@FirstDOM的时间戳部分的零,我得到了正确的日期,但是是运行脚本的时间。假设是上午8:50,我得到: 修复此小故障的最佳方法是什么? 问候, 缺口 问题答案: 将@FirstDOM转换为如下形式: 我希望

  • 问题内容: 我想在表中选择所有记录,这些记录的输入日期早于2个月。 知道我该怎么做吗? 我还没有尝试过任何东西,但是我在这一点上: 问题答案: 如果您使用的是SQL Server,请尝试以下操作: 根据您的更新,它将是: