0

我正在尝试在 mysql 数据库中搜索日期之间的所有约会。日期采用这种格式。

 2012-07-26

这是我用来从另一个页面上的下拉选择框中选择相关约会的代码。

    AND SUBSTRING(startDate, 6, 2) >= $month
    AND SUBSTRING(startDate, 6, 2) <= $month2 
    AND SUBSTRING(startDate, 9, 2) <= $day 
    AND SUBSTRING(startDate, 9, 2) <= $day2

我遇到的问题是,如果我选择像 02 这样的一天,那么任何月份的结果都只会比 02 早几天。而我需要更多类似的东西;

 SUBSTRING(startDate, 6, 5) <= '$month2'-'$day2' 

我只是不确定如何正确表达它。

4

2 回答 2

2

您应该使用 MySQL 的日期函数,而不是SUBSTRING假设您的列属于DATEDATETIME类型。

相关日期函数:

  • DAY()
  • MONTH()

新代码:

AND MONTH(startDate) >= $month
AND MONTH(startDate) <= $month2
AND DAY(startDate) <= $day
AND DAY(startDate) <= $day2

您也可以使用BETWEEN运算符。

文档

于 2012-12-03T16:53:08.220 回答
0

为什么不这样:

SELECT ...
WHERE startDate BETWEEN '2012-07-25' AND '2012-07-27'

或者如果您需要动态范围

WHERE startDate BETWEEN (now() - INTERVAL 1 WEEK) AND (now() + INTERVAL 1 WEEK)

通常不需要对日期值进行字符串操作。MySQL 有一组非常好的日期操作/检索/格式化函数,可以处理几乎所有事情。

于 2012-12-03T16:56:09.863 回答