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

标签 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 以使其成为 4 个字符)。更具体地说,以下是我想要实现的目标:

+------+----------------+
| 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 |
+------+----------------+

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

谁能给我一些启发吗?

最佳答案

对于您显示的具有固定帐号长度的非常简单的情况,这样做就可以了;

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

An SQLfiddle to test with .

关于mysql - 用表的 id 替换字符串值的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268378/

相关文章:

mysql join with condition on 子句返回 null

javascript - 谷歌地图、SQL、XML、Ajax 天哪!

java - 基于子字符串过滤数据库结果在android中

python - 使用 SQL SELECT 语句将 SQLite 数据库转换为 Python 字典

python - 如何正确解析右括号

mysql - 数据库建模-mysql

mysql - SQL 将行内容连接到另一个表的列名称

mysql - 如何在反对js中使用find_in_set?

regex - 正则表达式匹配除全零之外的任何数字?

java - 正则表达式仅匹配最后一次出现的情况