在 MySQL 查询中将字符串格式化为日期

Posted

技术标签:

【中文标题】在 MySQL 查询中将字符串格式化为日期【英文标题】:Format a string to a date in MySQL query 【发布时间】: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'),但无法将其转换为日期,因此我可以订购该列。我想保持这种格式的日期,我只需要为我的查询订购它。

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于在 MySQL 查询中将字符串格式化为日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在IOS中将日期格式化为字符串,如“一天前”、“分钟前”?

在 iOS 中将用户出生日期格式化为 NSDate 对象

如何在R中将多个日期格式格式化为一个?

在 Redshift 中将日期时间列格式化为 ISO 日期时间

在MySQL数据库里面,怎么使用SQL语句查询功能把时间戳格式格式化为日期格式如:2013-02-28 6:00:00 ?

google-bigquery 在查询结果中将日期格式设置为 mm/dd/yyyy