【问题标题】:Format a string to a date in MySQL query在 MySQL 查询中将字符串格式化为日期
【发布时间】:2020-12-22 19:52:38
【问题描述】:

我有一个如下图的表格,日期列是一个字符串(MMMM-yyyy)。

我想选择 ID 的最新行。对于 ID #2,最新日期为 2020 年 8 月,价格为 45.40

ID   Date         Price
2    August-2020  45.40    
2    July-2020    42.30

我尝试了format(date, 'MMMM-yyyy) as formatted date STR_TO_DATE(date, '%MMMM-%yyyy'),但无法将其转换为日期,因此我可以订购该列。我想保持这种格式的日期,我只需要为我的查询订购它。

【问题讨论】:

    标签: mysql sql string date greatest-n-per-group


    【解决方案1】:

    使用str_to_date() 将字符串转换为日期;在转换之前需要一个小技巧来使原始值成为完整的日期字符串,所以:

    str_to_date(concat(date, '-01'), '%M-%Y-%d')
    

    要在每个 id 的最新日期过滤表,您可以:

    select t.*
    from mytable t
    where date = (
        select date
        from mytable t1
        where t1.id = t.id
        order by str_to_date(concat(date, '-01'), '%M-%Y-%d') desc
        limit 1
    )
    

    【讨论】:

      【解决方案2】:

      您需要为 MySQL 设置正确的格式说明符。我希望这会起作用:

      select STR_TO_DATE('August-2020', '%M-%Y')
      

      但是,您似乎需要:

      select str_to_date(concat('01-', 'August-2020'), '%d-%M-%Y')
      

      Here 是一个 dbfiddle。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        相关资源
        最近更新 更多