-2

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

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() ;
4

5 回答 5

1

好吧,直截了当,您的数据一团糟:)

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

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

于 2013-10-11T05:14:55.487 回答
0

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

SELECT * FROM `table` WHERE DATE_FORMAT(`date`, "%M %d %Y") > CURDATE() ;
于 2013-10-11T05:24:51.140 回答
0

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

SELECT * FROM  `table` WHERE  STR_TO_DATE(`date`,'%b %d %Y' )  > CURDATE( )
于 2013-10-11T05:38:18.063 回答
0

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

SELECT * FROM `tablename` WHERE `date` > CURDATE( );
于 2013-10-11T05:29:56.647 回答
0

CURDATE() 的函数定义返回一串数字:根据上下文,您将获得“2008-06-13”或“20080613”。除了作为字符串之外,这无法与 'Oct 22 2014' 进行比较——而且我不知何故认为字符串比较不是你想要的。

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

于 2013-10-11T05:17:21.807 回答