我有一张类似下面的表格。我的目标是只返回即将到来的日期的结果,而不仅仅是已经过去的结果。
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() ;
答案 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( )