【问题标题】:How to convert a date string to mysql date format for calculating date diff using mysql query如何将日期字符串转换为 mysql 日期格式以使用 mysql 查询计算日期差异
【发布时间】:2017-07-10 04:05:39
【问题描述】:

我有一列以 ddmmyy 格式存储日期(例如 151216)。如何将其转换为 yyyy-mm-dd 格式(例如 2016-12-15)以计算与当前日期的日期差异?我尝试使用 DATE_FORMAT 函数,但它不适合这个。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果要获取日期差异,可以在使用str_to_date()将字符串转换为日期后使用to_days()

    select to_days(curdate()) - to_days(str_to_date(col, '%d%m%y'))
    

    datediff():

    select datediff(curdate(), str_to_date(col, '%d%m%y'))
    

    timestampdiff():

    select timestampdiff(day, str_to_date(col, '%d%m%y'), curdate())
    

    【讨论】:

    • 它说 FUNCTION dbname.string_to_date 不存在
    • 很确定应该是str_to_date 而不是string_to_date
    • 这个问题很快就解决了。
    【解决方案2】:

    您可以为此使用函数STR_TO_DATE()

    STR_TO_DATE('151216', '%d%m%y')
    

    查询看起来像:

    select
        foo.bar
    from
        foo
    where
        STR_TO_DATE(foo.baz, '%d%m%y') < CURDATE()
    

    注意:由于STR_TO_DATE()CURDATE() 都返回日期对象,因此没有理由更改日期的实际显示格式。对于这个函数,我们只需要格式化它。如果你想在查询中显示它,你可以使用类似

    DATE_FORMAT(STR_TO_DATE(foo.baz, '%d%m%y'), '%Y-%m-%d')
    

    为了得到差异,我们可以简单地减去时间

    select 
        to_days(CURDATE() - STR_TO_DATE(foo.baz, '%d%m%y')) as diff
    from
        foo
    

    如果您只想选择具有指定数量差异的行,您可以将整个 to_days(...) 位放在 where 子句中。

    【讨论】:

    • 它说 FUNCTION dbname.string_to_date 不存在
    • @ZahidulHosseinRipon:嗯...试试STR_TO_DATE()
    【解决方案3】:
    SELECT STR_TO_DATE('151216', '%d%m%y') FROM `table`
    

    使用这个'%d%m%y'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多