【问题标题】:SQL query where() date's year is $yearSQL 查询 where() 日期的年份是 $year
【发布时间】:2012-02-29 11:59:47
【问题描述】:

我将日期存储在我的数据库中 date 数据类型的列中。

假设我有 date 列,我在其中存储“2011-01-01”、“2012-01-01”、“2012-02-02”等数据。

现在我需要创建只选择 date 等于 2012 的行的 SQL

SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012

查询是什么样的?

【问题讨论】:

    标签: php sql


    【解决方案1】:

    查看 MySQL 的 YEAR() docs 函数

    SELECT * FROM table WHERE YEAR(date)=2012
    

    【讨论】:

      【解决方案2】:

      使用YEAR(date) - 这将为所有日期计算YEAR(date),即使是那些你从未使用过的日期。它还会使索引的使用变得不可能——在 DB 层是最坏的情况。

      使用

      $sql="SELECT * FROM table WHERE `date` BETWEEN '$year-01-01' AND '$year-12-31'"
      

      作为一般规则:如果您可以在常数计算和字段计算之间进行选择,请使用前者。

      【讨论】:

      • 关于计算的要点。你也可以WHERE `date` LIKE '$year-%'.
      • @ceejayoz 这同样糟糕!它为所有日期创建字符串表示,不使用索引...如果您可以在常量计算和字段计算之间进行选择,请使用前者。 LIKE 是现场计算!
      • 这绝对是更好的解决方案。特别是如果您有日期索引。
      • @EugenRieck 当我执行EXPLAIN 时,我得到了相同的执行计划。看来 MySQL 足够聪明,可以找出日期。
      • @ßãlãjî 大多数时候 12 月有 31 天。
      【解决方案3】:

      从 DATEPART(YEAR,[DATE])=2012 的表中选择 *

      【讨论】:

        猜你喜欢
        • 2012-05-15
        • 2012-11-07
        • 2013-09-25
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 2012-01-11
        • 2021-10-21
        • 1970-01-01
        相关资源
        最近更新 更多