我有一个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;不停摆弄