如何使用SQL替换字符串末尾的子字符串?

3

我有一个这样的表格:

xxx-xxxxxxx-29
xxx-xxxxxx-87
xxx-xxxxxxxxx-2
xxx-xxx-33

我需要将每个以-n结尾的字符替换为-0n(在破折号和数字之间添加零)。 保留 -nn 不变。

因此,如果从右数第二个字符是'-',则用'-0'替换它。

这可以使用UPDATE完成吗?

2个回答

3
我需要把结尾的每个 -n 替换为 -0n(在破折号和数字之间加一个零)。
一种选择是使用 regexp_replace()
update mytable set mycol = regexp_replace(mycol, '-(\d)$', '-0\1');

'-(\d)$' 匹配字符串末尾的短横线后跟一个数字,并捕获该数字;然后你可以在前面添加一个前导 '0'


1
@GMB '-(\d)$' 是一个不错的正则表达式,加上 +1。在大数据集上,使用 where 条件会更有效率。 - Lalit Kumar B

2
这里有一种方法:
update mytable
set data = substr(data, 1, length(data)-1) || '0' || substr(data,-1)
where data like '%-_';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接