gpt4 book ai didi

sql - 如何从 PostgreSQL 中的文本中删除分隔部分?

转载 作者:行者123 更新时间:2023-12-05 08:19:50 25 4
gpt4 key购买 nike

我想从字符串中删除一些文本模式,我的字符串有一个竖线分隔符,而且参数并不总是相互跟随。

这是我的字符串

TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3

我想消除 TType=SENDURL=min://j?_a=3&ver=1.1

因此我的最终结果应该是

Status=OK|day=3

我试过的。 在 postgresql 中 不工作。

select REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3', 
'(TType=.*?(\||$))|(URL=.*?(\||$))', '')

最佳答案

回答:

SELECT 
REGEXP_REPLACE(
REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
'(TType|URL)=[^|]*\|?', '','g'),
'\|$', '');

解释:

  1. 您的模式中的 .*? 部分虽然不贪心,但也会消耗冒号,因此不会按预期运行。这是由 [^|]* 修复的,它使用任何非冒号字符,零次或多次。

  2. 然后您还需要添加全局标志“g”,以替换所有出现的模式,如 documentation 中所述.

  3. 最后,如果您需要消除的参数最后出现(因为参数可以以任何顺序出现),您需要添加一个额外的替换步骤以消除字符串末尾的残留冒号。

例如没有额外的步骤,如下

SELECT
REGEXP_REPLACE('Status=OK|URL=min://j?_a=3&ver=1.1|day=3|TType=SEND',
'(TType|URL)=[^|]*\|?', '','g');

产生

Status=OK|day=3|

同时,添加额外的步骤,如下

SELECT 
REGEXP_REPLACE(
REGEXP_REPLACE('Status=OK|URL=min://j?_a=3&ver=1.1|day=3|TType=SEND',
'(TType|URL)=[^|]*\|?', '','g'),
'\|$', '');

产生所需的

Status=OK|day=3

关于sql - 如何从 PostgreSQL 中的文本中删除分隔部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66210303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com