在 Postgresql 中以逗号分隔值提取子字符串

Extract Substring in Comma Separated values in Postgresql

Postgresql 中的两个变量:

V_VAR :='US185268001,US285268002,US385268005'; --Input
V_OUT := '001,002,005'; --Expected output to be stored

知道如何在 postgresql 中进行操作吗?每个逗号分隔值的最后 3 个字符。如何操作 V_VAR 变量以获得作为 V_OUT 变量的输出。

更新:

请注意:V_VAR 可以有任意数量的 CSV 列表。这里我有 3 个值用于示例目的。

谢谢, 卡尔提克

我们可以在这里尝试使用正则表达式替换:

SELECT
    col,
    REGEXP_REPLACE(col, '.*?([0-9]{3})(,|$)', '', 'g') AS col_out
FROM yourTable;

此处的策略是延迟匹配,直到匹配(并捕获)一组中每个代码的最后 3 位数字,以及第二组中的可选逗号。然后,我们仅替换为三位数字和可选的逗号分隔符。

注意:正如@BillKarvin 所指出的,存储未规范化的 CSV 并不是最佳的数据库设计。如果可能,请考虑将每个代码放到单独的记录中。