将数据迁移到新数据库,并希望从正确的角度开始。以前的开发人员让用户手动输入日期范围,并将所有内容作为字符串存储在一列中。格式包括(但不限于):
September 2008 – March 2010
May 2015 – Present
2007 – 2008
July, 1995 – March, 1997
July, 1995 – Current
是的,它非常丑陋。展望 future ,我想将它们分成两列,开始日期和结束日期,以便可以动态创建信息。我能找到的唯一一致的模式是所有开始日期都包含年份,所有结束日期都包含年份或表明范围仍在增长。另一种模式是每个日期都可以按“-”模式拆分。如果有一种简单的方法来提取月份,我很乐意研究它,但月份对于此目的并不重要,因此提取年份的答案绰绰有余。
最佳答案
这是一种方法:
select (case when substring_index(col, ' - ', 1) regexp '^[0-9]{4}$'
then substring_index(col, ' - ', 1)
when substring_index(col, ' - ', 1) regexp '[0-9]{4}$'
then right(substring_index(col, ' - ', 1), 4)
else 'Unknown'
end) as startYear,
(case when substring_index(col, ' - ', -1) regexp '^[0-9]{4}$'
then substring_index(col, ' - ', -1)
when substring_index(col, ' - ', -1) regexp '[0-9]{4}$'
then right(substring_index(col, ' - ', -1), 4)
when substring_index(col, ' - ', -1) like '%Current%' or
substring_index(col, ' - ', -1) like '%Present%'
then date_format(now(), '%Y')
else 'Unknown'
end) as endYear
如果您在结果列中发现 'Unknown'
值,您可能需要额外的逻辑。
关于mysql - 在 MySQL 中,如何从一列输入不一致的日期中提取年份作为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029417/