【问题标题】:Mysql Month - Year ComparisonMysql 月 - 年比较
【发布时间】:2013-07-09 05:42:28
【问题描述】:

如何进行查询以仅选择月份 - 年份?比如,范围是 2013 年 1 月 - 2014 年 12 月?

我的表格中有一个“日期”列。

我通常做一个日期范围,比如WHERE date >= ? AND date <= ?,它是从日期到日期。我只想选择月份和年份,没有日期。

现在我想做WHERE date >= (January 2013) AND date date <= (December 2014)

有可能吗?

【问题讨论】:

  • 为什么不使用 2013 年 1 月 1 日和 2014 年 12 月 1 日作为过滤器。它会给你同样的结果。
  • 因为公司希望这样。我用它来生成报告,他们说只能过滤月-年到月-年而不是从日期到日期,以避免在上面放一天。
  • 但是当你在列上应用任何函数时,它不会使用索引,所以在这种情况下你的查询会变慢。

标签: mysql


【解决方案1】:
SELECT * FROM TABLE_NAME
WHERE DATE_FORMAT(date, "%Y-%m") BETWEEN '2013-01' AND '2014-12';

【讨论】:

    【解决方案2】:
    SELECT fields
    FROM table
    WHERE EXTRACT(YEAR_MONTH FROM date) BETWEEN '2013-01' AND '2014-12'
    

    您也可以使用 DATE_FORMAT(date,'%Y%m') 代替 EXTRACT。

    【讨论】:

      【解决方案3】:

      使用mysql的月份和年份函数Date and Time Functions

      【讨论】:

        【解决方案4】:

        考虑这样的选择:

        SELECT *
        FROM supportContacts
        WHERE DATE_FORMAT(date, '%Y') BETWEEN '2013' AND '2014'
        AND DATE_FORMAT(date, '%m') BETWEEN '01' AND '12';
        

        SQLFiddle

        【讨论】:

        • 02-2000 将属于该范围。也许如果您将顺序更改为“%Y-%m”...
        【解决方案5】:
        SELECT * FROM `table` WHERE date_format(`date`,'%M %Y') >= 'January 2013' AND date_format(`date`,'%M %Y') <= 'December 2014'
        

        【讨论】:

          【解决方案6】:
          SELECT * 
          FROM MySampleTable
          WHERE Month(create_dt) IN (1, 2, 3)
          AND Year(create_dt) = 2013
          

          如果您的表中有大量数据,并且您感兴趣的日期字段已编入索引,则您可能希望将其绑定到开始日期和结束日期之间。对这些函数的评估将强制进行表扫描(因为日期值必须由两个函数进行按摩才能正确解释),因此运行速度会很慢。您可以采取任何措施来减少被评估的行数。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-15
            • 2019-03-13
            • 1970-01-01
            相关资源
            最近更新 更多