在 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 并不是最佳的数据库设计。如果可能,请考虑将每个代码放到单独的记录中。
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 并不是最佳的数据库设计。如果可能,请考虑将每个代码放到单独的记录中。