按日期时间MYSQL格式过滤

时间:2013-05-20 19:47:49

标签: mysql date datetime-format

我有一个Mysql表,用于该表上的日志文件,有一个名为'log_date'的字段,它以下列格式存储日期(%Y-%m-%d%H:%i 。%s)。在数据库中,日期看起来像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

的行

如果我反转&lt; (少于)到a&gt; (大于),查询如下:

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

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

2 个答案:

答案 0 :(得分:23)

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)

答案 1 :(得分:0)

你可以试试......

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

您也可以使用 now()功能获取今天的日期。