2012-12-03 57 views
0

我正在尝试搜索mysql数据库中日期之间的所有约会。日期是这种格式。在php/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' 

我只是不确定如何正确使用它。

+0

日期会更好地存储为MySQL'DATE'字段而不是字符串,那么您可以使用'BETWEEN'子句。 – MrCode

+0

它存储为DATETIME。 – blarg

回答

2

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

有关日期的功能:

  • DAY()
  • MONTH()

新代码:

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

您可能还可以使用BETWEEN操作。

Documentation

+0

计算机说不,因为它似乎没有识别字符串中日期的不同部分。 – blarg

+1

你的意思是电脑说不?尝试拍打它。 – Kermit

+1

http://www.youtube.com/watch?v=0n_Ty_72Qds – blarg

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有一套非常不错的date manipulation/retrieval/formatting functions,几乎可以处理所有的事情。