【问题标题】:Filter records from MySQL by year按年份过滤来自 MySQL 的记录
【发布时间】:2013-06-10 19:29:10
【问题描述】:
  1. 如果我有列类型日期,它会显示像这样的日期 2013-06-25。如何仅按年份过滤记录,例如2011 年还是 2013 年?
  2. 如何过滤介于日期之间的记录,例如:2013-06-25 和 2013-07-20

【问题讨论】:

标签: mysql


【解决方案1】:

2013-06-25 和 2013-07-20 之间的所有日期:

SELECT * FROM myTable
WHERE myDateColumn BETWEEN '2013-06-25' AND '2013-07-20'

2011 年或 2013 年的所有日期:

SELECT * FROM myTable
WHERE YEAR(myDateColumn) IN (2011, 2013)

2011 年至 2013 年之间的所有日期:

SELECT * FROM myTable
WHERE YEAR(myDateColumn) BETWEEN 2011 AND 2013

或者,如果您在日期上有一个索引并且想要一个可优化的查询,您应该放弃 YEAR 函数调用:

SELECT * FROM myTable
WHERE myDateColumn BETWEEN '2011-01-01' AND '2013-12-31'

并按照建议查看日期函数。祝你好运!

【讨论】:

    【解决方案2】:

    使用这样的东西:

    SELECT * FROM table 
    WHERE date LIKE '%2013%'
    

    获取包含 2013 年的数据。

    将此应用到您自己的表结构中,它应该会给您想要的结果。

    【讨论】:

      【解决方案3】:

      您可能应该查看 MySql 的 date and time functions,它向您展示了有关日期和时间可用的不同函数的大量信息。不过,为了回答您的问题,我希望这些快速查询会有所帮助。

      SELECT 
          * 
      FROM MyTable 
      WHERE datecolumn > '2011-01-01' 
          AND datecolumn < '2012-01-01'
      

      或者,你可以这样写

      SELECT 
          * 
      FROM MyTable 
      WHERE datecolumn BETWEEN '2011-01-01' AND '2012-01-01'
      

      以这种方式编写查询而不是使用YEAR 函数将有助于利用索引(如果有的话)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 2015-09-20
        相关资源
        最近更新 更多