是否有一个PostgreSQL函数让我们带一个大字符串,将其分成子字符串,然后仅替换那些子字符串中的项?

问题描述 投票:0回答:2

schema:fruit_schema

表格:fruit_table

我在my_column列的单元格中有此字符串。

x:y。是我不感兴趣的文字

    <Item>
    <Name>First</Name>
    <Subject>x:y. Food: Apple. x:y. </Subject>
    </Item>

    <Item>
    <Name>Second</Name>
    <Subject>x:y. x:y. Food: Apple. Type: Red. x:y. x:y.</Subject>
    </Item>

我想在第一项中添加'类型:红色'。到目前为止,我已经写了这个查询:

    DO
    $$
    DECLARE
        oldItem varchar := 'Food: Apple.';
        newItem varchar;
    BEGIN
        newItem  = 'Food: Apple. Type: Red.';

        UPDATE 
            fruit_schema.fruit_table AS profile
        SET 
            my_column = REPLACE(my_column, oldItem, newItem)
        WHERE
            profile.my_column ILIKE '%First%</Item>%';
    END$$;

但是,这是我的输出:

    <Item>
    <Name>First</Name>
    <Subject>x:y. Food: Apple. Type: Red. x:y. </Subject>
    </Item>

    <Item>
    <Name>Second</Name>
    <Subject>x:y. x:y. Food: Apple. Type: Red. Type: Red. x:y. x:y.</Subject>
    </Item>

第一个项目正确更新,但是第二个项目被替换为重复的“类型:红色”。无论如何,我可以将这条巨大的琴弦分别分为第一和第二项吗?我只想处理第一个子字符串,从<Name>First</Name></Item>

我想对我要处理的其他所有项目执行此操作。如果可能的话,我希望避免手动计算项目中的字符数。

schema:fruit_schema表:fruit_table。我在my_column列的单元格中有此字符串。 x:y。是我对First

postgresql postgresql-10
2个回答
0
投票

对于特定主题,您可以进行regexp_replace


0
投票

例如,您需要regexp_replace()negative lookahead功能:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.