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

v1l68za4  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(405)

postgresql中的两个变量:

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

你知道怎么用postgresql吗?每个逗号分隔值的最后3个字符。如何操作v\u var变量以将输出作为v\u out变量。
更新:
请注意:v\u var可以有任意数量的csv列表。这里我有3个值作为示例。
谢谢,卡蒂克

r7knjye2

r7knjye21#

我们可以在这里尝试使用regex替换:

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

这里的策略是延迟匹配,直到在一个组中匹配(并捕获)每个代码的最后3位,在第二个组中匹配一个可选的逗号。然后,我们只替换为三位数字和可选的逗号分隔符。
注:正如@billkarvin所指出的,存储非标准化的csv并不是最佳的数据库设计。如果可能的话,请考虑将每个代码放到一个单独的记录中。

相关问题