【发布时间】:2017-12-19 02:59:26
【问题描述】:
我有一个名为 'date' 的列,其类型为 varchar(出于某种原因),但以 (d-m-Y H:i:s) 格式存储日期
现在我必须进行 BETWEEN 查询以查找两个日期之间的记录。但是因为数据类型是varchar,所以我首先要把列转换为日期类型,然后比较。所以我试过这个-
SELECT
mobile,
STR_TO_DATE(date,'%Y-%m-%d')
FROM register
WHERE STR_TO_DATE(date,'%Y-%m-%d')
BETWEEN STR_TO_DATE('2017-05-01','%Y-%m-%d') AND
STR_TO_DATE('2017-05-31','%Y-%m-%d')
此查询将“日期”列正确转换为 Y-m-d 格式。但是,比较的两个日期被视为字符串(“2017-05-01”和“2017-05-31”),结果仅返回日期为 2017-05-20 的记录。
查询应该是什么,以便比较列和日期类型中的给定日期?
【问题讨论】:
-
对日期的 str_to_date 函数调用应该使用与存储方式类似的格式,而不是您希望它输出的方式。
-
您应该将
STR_TO_DATE(date,'%Y-%m-%d')此处的格式与d-m-Y H:i:s的实际内容格式相匹配。 -
查看this
-
是的!谢谢!将其转换为 '%d-%m-%Y %H:%i:%s' 有效。