mysql date comparision无法正常工作无法找到问题

时间:2017-07-16 14:05:08

标签: mysql date string-to-datetime

我有一个大数据,日期为字符串。

列名date1

数据类型varchar

存储的数据采用以下格式: 2016年3月14日下午05:44:38

现在我只从这个字符串中拆分日期,如下所示: 14-03-2016

使用此:DATE_FORMAT(STR_TO_DATE(gr.date1, '%d-%M-%Y'),'%d-%m-%Y')

现在我正在尝试将日期与此查询进行比较:

SELECT * FROM 
( SELECT date1,DATE_FORMAT(STR_TO_DATE(date1, '%d-%M-%Y'),'%d-%m-%Y') as dateFormatted
 FROM `grabt` ) as mTbl WHERE mTbl.dateFormatted >= '19-01-2016' 
 AND mTbl.dateFormatted <= '25-01-2016'

但它无法正常发生可能的错误。?

2 个答案:

答案 0 :(得分:1)

学习使用正确的列类型。也许你被其他人困在了将日期/时间存储为字符串的错误决定。也许你无法改变这一点。但是,在查询中,请使用正确的类型!

m*m

这将进行比较,因为日期不是字符串

答案 1 :(得分:1)

时间戳字符串14-Mar-2016 05:44:38pm可以使用STR_TO_DATE()和格式字符串%d-%b-%Y %r转换为日期时间。然后我们可以通过用DATE()包装来获得日期部分。看看for a demo to see that this works

SELECT *
FROM
(
    SELECT DATE(STR_TO_DATE(date1, '%d-%b-%Y %r')) AS dateFormatted
    FROM grabt
) AS mTbl
WHERE mTbl.dateFormatted BETWEEN '2016-01-19' AND '2016-01-25'

正如戈登已经指出的那样,理想情况下,你应该使用日期类型而不是日期计算的字符串。顺便说一句,在WHERE子句中进行比较时,请使用有效的日期字符串。 YYYY-MM-DD是有效格式,例如2016-01-19,但19-01-2016不是。