替换sql中的第一个字符

fruv7luv  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(898)

我正在尝试替换字符串的第一个字符。我可以用 replace() 功能。但不知道如何替换列中所有字符串的第一个字符。
样本数据:

Column1
43449927
13448927
53443457

将第一个字符替换为“7”后的预期结果:

Column1
73449927
73448927
73443457
dffbzjpn

dffbzjpn1#

下面的语法帮助了我,

'7' || substr(column1, 2, length(column1))
6rqinv9w

6rqinv9w2#

对于字符数据:

update mytable set data= '7' || substr(mycolumn, 2);
1bqhqjot

1bqhqjot3#

right() 负偏移是最短和最快的:

'7' || right(column1, -1)
``` `replace()` 他不够聪明,不能把一个位置当作模式。一定会的 `regexp_replace()` :

regexp_replace(column1, '^.', '7')

但是正则表达式更昂贵。
细微差别:后者返回一个空字符串( `''` )对于空字符串输入,因为没有可替换的内容。如果这是您需要的行为,并且您仍然想要最佳性能,请将第一个 Package 在(便宜!) `CASE` 表达式:

CASE WHEN column1 <> ''
THEN '7' || right(column1, -1)
ELSE column1 END

作为参考:在linux上对postgres 12的快速测试中,表达式 `right()` 是。。。
比添加 `CASE` .
比以前快25% `substr()` 只有“from”参数。
约2倍的速度 `substr()` 带有冗余的“计数”参数(长度)。
~3倍于 `overlay(column1 PLACING '7' FROM 1)` .
约10倍于 `regexp_repace()` .
在db中使用扩展测试用例测试矩阵

相关问题