根据当前日期获得结果

时间:2013-10-11 05:10:17

标签: php mysql sql date

我有一张类似下面的表格。我的目标是只返回即将到来的日期的结果,而不仅仅是已经过去的结果。

id    |   date
1       Mar 12 2012 
2       Apr 17 2013
3       Oct 22 2014
4       Jul 12 2015

欲望结果:

id    |   date
1       Oct 22 2014
2       Jul 12 2015

我已经尝试过以下这一行,但它返回零结果。

SELECT * FROM `table` WHERE NOW() < `date`

OR

SELECT * FROM `table` WHERE `date` > CURDATE() ;

5 个答案:

答案 0 :(得分:1)

嗯,有点直,你的数据很乱:)

基本上,您无法使用该格式在MySQL中存储日期。这导致列是(var)char。尝试对字符串进行排序就好像它是一个日期时间一样,不仅会给你带来麻烦(它实际上已经开始了,因为你必须在这里发布一个问题),但也会导致查询性能不佳。

您绝对应该重新考虑将其更改为datetime

答案 1 :(得分:0)

CURDATE()的函数定义返回一个数字字符串:根据上下文,您将获得'2008-06-13'或'20080613'。这不能与'2014年10月22日'进行比较,除非作为一个字符串 - 我不知道字符串比较是不是你拍摄的。

如果您可以将“日期”字段的格式更改为机器可读日期(请参阅MYSQL日期和时间的documentation),您可能可以进行比较工作。

答案 2 :(得分:0)

使用DATE_FORMAT函数比较字符串日期。

SELECT * FROM `table` WHERE DATE_FORMAT(`date`, "%M %d %Y") > CURDATE() ;

答案 3 :(得分:0)

这是您所需结果的正确查询。现在检查数据库中日期列的数据类型,它应该是日期或日期时间。

SELECT * FROM `tablename` WHERE `date` > CURDATE( );

答案 4 :(得分:0)

使用STR_TO_DATE函数将字符串转换为日期并进行比较

SELECT * FROM  `table` WHERE  STR_TO_DATE(`date`,'%b %d %Y' )  > CURDATE( )