如何将日期字符串转换为 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 日期格式?