【问题标题】:Convert varchar in MySql to a given date format将 MySql 中的 varchar 转换为给定的日期格式
【发布时间】: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' 有效。

标签: mysql sql


【解决方案1】:

这个查询给出了你想要的

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

【讨论】:

    【解决方案2】:
    STR_TO_DATE('DateString', '%e %m %Y %H:%i:%s')
    

    STR_TO_DATE('DateString', '%d %m %Y %H:%i:%s')
    

    【讨论】:

    • 将其转换为 ('%d-%m-%Y %H:%i:%s') 有效。为什么你用 e 而不是 d?还是错字?
    • 是的,您可以同时使用两者,%e 是一种更准确的表示日期的方式,即两位数。 PS:您可以通过接受答案来表达对社区的感激之情。
    • 只是在等待那个e的澄清! ;-)
    【解决方案3】:

    将格式字符串与您的存储方式相匹配:

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

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2011-08-13
      相关资源
      最近更新 更多