20

我有一个用于该表上的日志文件的 Mysql 表,有一个名为“log_date”的字段,它以以下格式存储日期(%Y-%m-%d %H:%i.%s ). 在 DB 上,日期看起来像 2013-20-05 00:00.00。假设今天的日期是 2013-20-05 我有从 2013-01-01 到今天的日志文件。如果我运行这样的查询:

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') < '2013-05-05 00:00.00'

这将返回数据库中的每一行,包括大于 2013-05-05 00:00.00 的行

如果我使用如下所示的查询将 <(小于)反转为 >(大于):

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') > '2013-05-05 00:00.00'

然后它返回零行。我认为时间戳是导致我之前使用日期格式但不是 DateTime 格式的问题的原因。为什么会这样?

4

2 回答 2

41

log_date 应该是 DateTime 数据类型。使用 MySQL DATE 函数要简单得多。一些例子

SELECT * FROM log_table
WHERE DATE(log_date) < '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) > '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN '2013-04-05' AND '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY)
于 2013-05-20T21:03:51.740 回答
1

你可以试试那个..

WHERE DATE_FORMAT(AUCTION_DATE, '%Y%m%d') >= DATE_FORMAT('2013/5/18', '%Y%m%d')

您还可以使用now()函数获取今天的日期。

于 2013-05-21T05:11:17.130 回答