我有一个大数据,日期为字符串。
列名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'
但它无法正常发生可能的错误。?
答案 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
不是。