将MySql中的varchar转换为给定的日期格式

时间:2017-07-14 05:58:59

标签: mysql sql

我有一个名为' 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。

查询应该是什么,以便比较日期类型中的列和给定日期?

3 个答案:

答案 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')