如何将日期字符串转换为 mysql 日期格式以使用 mysql 查询计算日期差异

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

以上是关于如何将日期字符串转换为 mysql 日期格式以使用 mysql 查询计算日期差异的主要内容,如果未能解决你的问题,请参考以下文章

如何将欧洲格式的字符串日期转换为有效的 mysql 日期格式?

php将日期格式转换为mysql格式以进行插入[重复]

如何在 BigQuery 中以字符串格式将工作日月份转换为日期?

MySQL将日期字符串转换为Unix时间戳

sql如何将字符串转为日期

将日期字符串转换为 mysql 日期时间字段