用表的id替换字符串值的最后一个字符

时间:2014-03-08 10:59:39

标签: mysql sql regex database

我的表中有[id,account_id]列。值是

+------+----------------+
| id   |    account_id  |
+------+----------------+
| 1    |  01-01-02-0007 |
| 2    |  04-05-06-0001 |
| 3    |  03-07-09-0001 |
| 4    |  03-04-04-0001 |
| 5    |  03-04-08-0101 |
| ...                   |
| 201  |  03-04-08-0111 |
+------+----------------+

我想要的是在account_id -000700010001之后替换每个id的最后一部分0(但仍然填充左侧的+------+----------------+ | id | account_id | +------+----------------+ | 1 | 01-01-02-0001 | | 2 | 04-05-06-0002 | | 3 | 03-07-09-0003 | | 4 | 03-04-04-0004 | | 5 | 03-04-08-0005 | | .... | | 201 | 03-04-08-0201 | +------+----------------+ 以使其成为4个字符)。更具体地说,以下是我想要实现的目标:

REPLACE

我想使用LPAD但不幸的是,这不能应用于我的情况,因为它不仅仅是我想要改变的部分(每个值保持相同)。我一直在寻找,但我无法做到这一点。我想,我必须以某种方式使用一些正则表达式和{{1}}来实现这一目标,但不确定如何实现。

任何人都可以向我展示一些亮点吗?

2 个答案:

答案 0 :(得分:2)

对于您正在显示固定帐号长度的非常简单的情况,这样做;

UPDATE accounts
SET account_id=CONCAT(LEFT(account_id,9), LPAD(id, 4, '0'))

An SQLfiddle to test with

答案 1 :(得分:0)

如果account_id格式不会改变,您可以使用
substring_indexlpadconcat可以根据需要应用更改。

update my_table 
set account_id = 
      concat( substring_index( account_id, '-', 3 ), '-', lpad( id, 4, '0' ) )