我有一个名为' date'其中包含varchar类型(原因)但以格式存储日期 - (d-m-Y H:i:s)
现在我必须进行BETWEEN查询以查找两个日期之间的记录。但由于数据类型是varchar,我首先必须将列转换为date-type然后进行比较。所以我试过这个 -
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"),结果返回日期记录仅-20。
查询应该是什么,以便比较日期类型中的列和给定日期?
答案 0 :(得分:1)
STR_TO_DATE('DateString', '%e %m %Y %H:%i:%s')
或强>
STR_TO_DATE('DateString', '%d %m %Y %H:%i:%s')
答案 1 :(得分:1)
将格式字符串与存储方式进行匹配:
SELECT
mobile,
STR_TO_DATE(date,'%Y-%m-%d')
FROM register
WHERE STR_TO_DATE(date,'%d-%m-%Y')
BETWEEN STR_TO_DATE('2017-05-01','%Y-%m-%d') AND
STR_TO_DATE('2017-05-31','%Y-%m-%d')
答案 2 :(得分:0)
此查询提供您想要的内容
SELECT
user_id,
STR_TO_DATE(date,'%d-%m-%Y')
FROM register
WHERE STR_TO_DATE(date,'%d-%m-%Y')
BETWEEN STR_TO_DATE('05-01-2015','%d-%m-%Y') AND
STR_TO_DATE('31-05-2017','%d-%m-%Y')