如何自动增加部分Varchar

时间:2016-07-21 16:02:04

标签: mysql

我尝试创建一个自动递增Varchar列的查询。数字值是一个日期值,突出显示,是我试图递增7的数字。有没有办法在数字列中自动递增数字/日期值?

发件人

select * from table_name where number = 'ABC**070516**A001'

select * from table_name where number = 'ABC**071216**A001'

2 个答案:

答案 0 :(得分:1)

好吧,在你的查询中,你没有增加任何东西。你正在做两个选择。如果要将varchar列的值更改为自动增量,则无法进行此操作。至少没有很多代码和许多代码。

最简单的解决方案是创建三个单独的列,并使第三个列自动递增。

col1     col2    col3
ABC      070516  A001
ABC      071216  A001

然后在检索/显示时连接列。

答案 1 :(得分:1)

如果您可以选择在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'))

它将执行以下操作:

  1. 提取日期编号 - MID('ABC070516A001', 4, 6)这表明它在开头总是有3个字母。如果格式更复杂,则需要具有正则表达式替换功能的库
  2. 将提取的数字转换为日期对象STR_TO_DATE('070516', '%m%d%y')
  3. 向日期对象添加7天的间隔。这将处理所有情况,如过渡到新的一个月和新的一年。 DATE_ADD('2016-07-05', INTERVAL 7 DAY)
  4. 将结果日期格式化为您的数字格式DATE_FORMAT('2016-07-12', '%m%d%y')
  5. 使用新号码REPLACE('ABC070516A001', MID('ABC070516A001', 4, 6), '071216')
  6. 替换号码