我试图创建一个查询以自动递增Varchar列。数字值是一个日期值,突出显示,是我要增加7的数字。是否有一种方法可以自动在number列中增加数字/日期值?
从
select * from table_name where number = 'ABC**070516**A001'
至
select * from table_name where number = 'ABC**071216**A001'
最佳答案
如果您可以选择在MySql之外执行此操作,请执行此操作。
如果您确切知道数字的格式-3 letters + date + something else
,则可以执行以下操作:
REPLACE('ABC070516A001', MID('ABC070516A001', 4, 6), DATE_FORMAT(DATE_ADD(STR_TO_DATE(MID('ABC070516A001', 4, 6), '%m%d%y'), INTERVAL 7 DAY), '%m%d%y'))
它将执行以下操作:
提取日期数字-
MID('ABC070516A001', 4, 6)
这表明它的开头总是3个字母。如果格式更复杂,则需要具有正则表达式替换功能的库将提取的数字转换为Date对象
STR_TO_DATE('070516', '%m%d%y')
将日期间隔增加7天。这将处理所有情况,例如过渡到新的月份和新年。
DATE_ADD('2016-07-05', INTERVAL 7 DAY)
将结果日期格式化为您的数字格式
DATE_FORMAT('2016-07-12', '%m%d%y')
用新号码替换号码
REPLACE('ABC070516A001', MID('ABC070516A001', 4, 6), '071216')