【问题标题】:How can I search for any day in a month?如何搜索一个月中的任何一天?
【发布时间】:2010-02-15 21:27:30
【问题描述】:

我正在数据库中搜索某月内写的文章:

between '1 '.$month.' '.$year and '31 '.$month.' '.$year

即使某些月份(如二月)只有 28 天,这种方法是否可行?换句话说,我是否必须动态查找一个月中的天数?

【问题讨论】:

  • 你的列在数据库中的名称和类型是什么?

标签: php mysql date


【解决方案1】:

不,您不需要知道月份的长度。只需这样做:

WHERE MONTH(yourcolumnname) = $month AND YEAR(yourcolumnname) = $year

【讨论】:

  • DATE、DATETIME 或 TIMESTAMP - 换句话说,MySQL 将其称为日期的列类型之一。我不相信您可以在 VARCHAR 列或任何内容上执行此操作。
  • @ceejayoz:在 MySQL 中,它也适用于 VARCHAR。如果字符串不是有效日期,它只会返回 NULL。
  • @Mark Byers 谢谢,很高兴知道。不过,想象一下它在其中一种日期类型上会更快,因为它不必猜测/解释。
  • 所以如果我的列是时间戳列,我会用时间戳替换 datetime 吗?
  • iMaster: 'datetime' 是列的 name 的占位符,而不是类型。
【解决方案2】:

您的代码看起来没问题。从某种意义上说它会起作用,但更优雅的方法是

SELECT * FROM tablename WHERE MONTH(columname) = '1'
                              AND YEAR(columnname) = '2009'

【讨论】:

    【解决方案3】:

    如果是DATETIMEDATE 字段,您也可以使用SELECT * FROM table WHERE date_column LIKE '2010-02-%'; 进行索引,这可能比MONTH()YEAR() 技术更快,后者必须对每个字段进行计算行。

    【讨论】:

      【解决方案4】:

      你能在之间搜索吗

      between '1 '.$month.' '.$year and '1 '.$month_plus1.' '.$year
      

      您是否尝试过针对您要匹配的数据运行 sql 语句,这可能是一个很好的开始方法。

      【讨论】:

      • 这包括下个月的第一天,我想这可能不是最理想的。
      • 如果包括时间,也可以用这个方法!...我用加一个月减去一秒或一毫秒
      猜你喜欢
      • 2015-02-06
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2016-06-17
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多