我试图创建一个查询以自动递增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')

09-10 17:59