如何在Postgresql中更新Partial Value



我有一个table,如下所示。。。

名称
数据-1 Aarong
数据-125 Aarong
INT-121 Aarong
INT-122 Aarong

如果字符串总是只包含一个破折号,则可以使用split_part():

update mytable set value = 
left(value, 1) || '-' || split_part(value, '-', 2)

如果可能有多个破折号,并且您想要第一个破折后的所有内容:

update mytable set value = 
left(value, 1) || substr(value, position('-' in value))

DB Fiddle演示

对于这种特殊情况,最简单的方法是执行两个查询。

update table set data=replace(data,'Data-','D-') where position('Data-' in data) > 0;

update table set data=replace(data,'INT-','I-') where position('INT-' in data) > 0;   

您可以使用regexp_replace()。查看新值:

select regexp_replace(value, '^(.).*(-.*)$', '12')
from t;

您可以将其解释为:

  • ^从字符串开始
  • (.)取第一个字符并记住它
  • .*忽略任意数量的字符(直到以下模式(
  • (-.*)记住连字符及其后面的内容
  • $到字符串末尾

'12'是替换项,它是第一个字符,然后是连字符,以及之后的所有字符。

更改它们:

update t
set value = regexp_replace(value, '^(.).*(-.*)$', '12');

正则表达式非常强大。如果需要调整模式匹配规则,调整正则表达式通常比处理更繁琐的字符串操作简单得多。

这里有一个db<gt;不停摆弄

最新更新