【问题标题】:Concatenate special characters to the column values based on pattern matching in Postgres根据 Postgres 中的模式匹配将特殊字符连接到列值
【发布时间】:2023-03-20 03:35:01
【问题描述】:

我在 postgres 中有一个包含以下列的表格

col1
C29[40
D1305_D1306delinsKK
E602C[20

我想附加一个字符串“p”。 & 在第 1 行和第 3 行元素和“p”中的右方括号到 row2 元素。

预期的输出是:

col2
p.C29[40]
p.D1305_D1306delinsKK
p.E602C[20]

我正在运行以下查询,该查询运行时没有错误,但缺少预期的输出。

SELECT  *,
        CASE     
                WHEN t.c LIKE 'p.?=[%'
                THEN 'p.'|| t.c || ']'

                ELSE 'p.'|| t.c

         END AS col2

FROM table;

【问题讨论】:

    标签: regex postgresql


    【解决方案1】:

    您可以使用两个链接的REGEXP_REPLACE 调用:

    SELECT REGEXP_REPLACE(REGEXP_REPLACE('C29[40', '^(.*\[\d+)$', 'p.\1]'), '^(?:p\.)?', 'p.')
    

    请参阅 regex demo #1regex demo #2PostgreSQL demo

    模式详情

    • ^ - 字符串开头
    • (.*\[\d+) - 第 1 组 (\1):任何 0+ 字符尽可能多 (.*),然后[ 和 1+ 数字
    • $ - 字符串结束。

    ^(?:p\.)? 模式匹配字符串开头的可选p. 子字符串,因此添加p. 或将p. 替换为p.(因此保留它)。

    【讨论】:

    • 它适用于第一行和第三行。如何添加 p。在第二行元素中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多