首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Postgresql:查找和替换字符串中括号内的多个字符

Postgresql:查找和替换字符串中括号内的多个字符
EN

Stack Overflow用户
提问于 2019-02-26 02:47:37
回答 1查看 723关注 0票数 0

我有一个名为SKETCH的列,它包含长度可变的向量字符串,如下所示:

"R24U26L24(LD26),“

每个字符串都包含某些字母,后面应该跟一个数字,并且所有错误都用括号()括起来。

我想找出每个向量字符串中的所有错误。字符串的任何部分,其格式如%(LD%)%或%(L%D)% %是通配符-并删除错误周围的圆括号对,以及后面没有数字的任何字母。

结果应该类似于下面的"R24U26L24D26,。“

我尝试组合UPDATE、CASE ELSE和REPLACE函数来运行不同的错误标准,但都没有成功。例如,我在下面使用的代码会将整个向量字符串替换为"%D%%“作为文本。任何帮助弄清楚这一点的人都非常感谢。

代码语言:javascript
复制
UPDATE table
SET sketch = CASE 
WHEN sketch LIKE '%(LD%)%' THEN REPLACE(REPLACE('%(LD%)%', '(L', ''), ')', '')
WHEN sketch LIKE '%(RU%)%' THEN REPLACE(REPLACE('%(RU%)%', '(R', ''), ')', '')
WHEN sketch LIKE '%(L%U)%' THEN REPLACE(REPLACE('%(L%U)%', '(', ''), 'U)', '')
WHEN sketch LIKE '%(L%D)%' THEN REPLACE(REPLACE('%(L%D)%', '(', ''), 'D)', '')
ELSE sketch END;

编辑:这是我使用的最后一个补丁。不像我希望的那样简洁,但它是有效的:

代码语言:javascript
复制
UPDATE table
SET sketch = regexp_replace(sketch, '\(LD([0-9]*)\)','D\1', 'g');

UPDATE table
SET sketch = regexp_replace(sketch, '\(RU([0-9]*)\)','U\1', 'g');

UPDATE table
SET sketch = regexp_replace(sketch, '\(L([0-9]*)U\)','L\1', 'g');

UPDATE table
SET sketch = regexp_replace(sketch, '\(L([0-9]*)D\)','L\1', 'g');
EN

回答 1

Stack Overflow用户

发布于 2019-02-26 03:01:29

试一试:

代码语言:javascript
复制
UPDATE table_name
SET sketch = regexp_replace(sketch, '\(LD([0-9]*)\)','L\1');

UPDATE table_name
SET sketch = regexp_replace(sketch, '\(RU([0-9]*)\)','R\1');

UPDATE table_name
SET sketch = regexp_replace(sketch, '\(L([0-9]*)U\)','\1U');

UPDATE table_name
SET sketch = regexp_replace(sketch, '\(L([0-9]*)D\)','\1D');

如果你想要一个单一的查询,我想其中之一可能是可行的:

代码语言:javascript
复制
UPDATE table_name
SET sketch = (CASE
WHEN regexp_matches(sketch, '\(LD([0-9]*)\)') THEN regexp_replace(sketch, '\(LD([0-9]*)\)','L\1')
WHEN regexp_matches(sketch, '\(RU([0-9]*)\)') THEN regexp_replace(sketch, '\(RU([0-9]*)\)','R\1')
WHEN regexp_matches(sketch, '\(L([0-9]*)U\)') THEN regexp_replace(sketch, '\(L([0-9]*)U\)','\1U')
WHEN regexp_matches(sketch, '\(L([0-9]*)D\)') THEN regexp_replace(sketch, '\(L([0-9]*)D\)','\1D')
ELSE sketch END);

代码语言:javascript
复制
UPDATE table_name
SET sketch = (CASE
WHEN sketch ~* '\(LD([0-9]*)\)' THEN regexp_replace(sketch, '\(LD([0-9]*)\)','L\1')
WHEN sketch ~* '\(RU([0-9]*)\)' THEN regexp_replace(sketch, '\(RU([0-9]*)\)','R\1')
WHEN sketch ~* '\(L([0-9]*)U\)' THEN regexp_replace(sketch, '\(L([0-9]*)U\)','\1U')
WHEN sketch ~* '\(L([0-9]*)D\)' THEN regexp_replace(sketch, '\(L([0-9]*)D\)','\1D')
ELSE sketch END);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54872826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档