我的表中有[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
-
,0007
,0001
和0001
之后替换每个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}}来实现这一目标,但不确定如何实现。
任何人都可以向我展示一些亮点吗?
答案 0 :(得分:2)
对于您正在显示固定帐号长度的非常简单的情况,这样做;
UPDATE accounts
SET account_id=CONCAT(LEFT(account_id,9), LPAD(id, 4, '0'))
答案 1 :(得分:0)
如果account_id格式不会改变,您可以使用
substring_index
,lpad
和concat
可以根据需要应用更改。
update my_table
set account_id =
concat( substring_index( account_id, '-', 3 ), '-', lpad( id, 4, '0' ) )