我有一个列,其中ddmmyy格式的日期存储(例如151216)。如何将其转换为yyyy-mm-dd格式(例如2016-12-15)以计算与当前日期的日期差异?我尝试使用DATE_FORMAT函数,但它不适合这个。
答案 0 :(得分:4)
如果您想获得日期差异,可以在使用to_days()
将字符串转换为日期后使用str_to_date()
:
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())
答案 1 :(得分:3)
您可以使用此功能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子句中。
答案 2 :(得分:0)
SELECT STR_TO_DATE('151216', '%d%m%y') FROM `table`
使用此'%d%m%y'