【发布时间】:2017-07-10 04:05:39
【问题描述】:
我有一列以 ddmmyy 格式存储日期(例如 151216)。如何将其转换为 yyyy-mm-dd 格式(例如 2016-12-15)以计算与当前日期的日期差异?我尝试使用 DATE_FORMAT 函数,但它不适合这个。
【问题讨论】:
标签: mysql
我有一列以 ddmmyy 格式存储日期(例如 151216)。如何将其转换为 yyyy-mm-dd 格式(例如 2016-12-15)以计算与当前日期的日期差异?我尝试使用 DATE_FORMAT 函数,但它不适合这个。
【问题讨论】:
标签: mysql
如果要获取日期差异,可以在使用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())
【讨论】:
str_to_date 而不是string_to_date
您可以为此使用函数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 子句中。
【讨论】:
STR_TO_DATE()
SELECT STR_TO_DATE('151216', '%d%m%y') FROM `table`
使用这个'%d%m%y'
【讨论】: