【问题标题】:Get all rows from a specific month and year获取特定月份和年份的所有行
【发布时间】:2015-02-26 16:31:30
【问题描述】:

我有一个 PHP 脚本,它总是从数据库表中查询所有数据,而且速度很慢。我真的只需要特定月份和年份的数据。

有没有一种简单的方法可以只获取这些条目?例如,2013 年 2 月的所有内容?

在我的表中存储日期的列的类型是 datetime,如果这适用于解决方案。

【问题讨论】:

标签: php mysql datetime


【解决方案1】:

您可以在 select 语句的 WHERE 子句中添加该条件。我建议对两个日期使用 BETWEEN 操作数:

SELECT myColumns
FROM myTable
WHERE dateColumn BETWEEN '2013-02-01' AND '2013-02-28';

如果您的意思是说您想要从 2013 年 2 月开始的所有内容,您可以使用大于或等于运算符:

SELECT myColumns
FROM myTable
WHERE dateColumn >= '2013-02-01';

编辑

虽然以上是我的首选方法,但为了完整起见,我想补充一点,MySQL 还提供了用于获取日期特定部分的功能。如果您想创建一个参数化查询,您可以将月份和年份作为整数传递(而不是开始和结束日期),您可以像这样调整您的查询:

SELECT myColumns
FROM myTable
WHERE MONTH(dateColumn) = 2 AND YEAR(dateColumn) = 2013;

这里有一大堆有用的date and time functions

【讨论】:

  • “例如,从 2013 年 2 月开始的所有内容?” - 我认为 OP 是特定于“开始于”而不是介于两者之间。因此,>= 会更合适。
  • 不要摆脱你原来的答案。只需添加它,以防万一。甚至可能是OR 运算符。有很多方法可以做到这一点。
  • 不客气。现在,让我们只希望 OP 正在索引他们的表。 ;-) 干杯
  • @Forivin 我不确定最好的方法是什么。如果您想要处理原始值的替代方法,请查看MONTH() and YEAR() 函数。你可以说WHERE MONTH(dateColumn) = 2 AND YEAR(dateColumn) = 2013
  • 我对它进行了全部测试,它运行良好。谢谢你。 :)
【解决方案2】:

您应该索引 datetime 字段以提高效率,然后在 sql 中使用 Between 语法。这将允许 mysql 引擎从返回的数据集中删除所有您不感兴趣的记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多