使用PostgreSQL中给定的模式和分隔符格式化字符串

时间:2013-03-16 11:13:10

标签: sql regex string postgresql substring

我正在尝试为以下场景编写PostgreSQL查询:

输入:
I)字母数字字符串,例如abcd1234efgh
II)模式,例如[1][2][3][2][1][3]
III)分隔符,例如-(连字符)

输出:
a-bc-d12-34-e-fgh

我需要查询。功能对我不起作用。

2 个答案:

答案 0 :(得分:1)

使用一次regexp_replace()来电:

SELECT regexp_replace('abcd1234efgh'
                     ,'^(.)(..)(...)(..)(.)(...)'
                     ,'\1-\2-\3-\4-\5-\6'
                     )

生成请求的结果。

用数字写的相同:

SELECT regexp_replace('abcd1234efgh'
                     ,'^(.{1})(.{2})(.{3})(.{2})(.{1})(.{3})'
                     ,'\1-\2-\3-\4-\5-\6'
                     )

答案 1 :(得分:0)

select concat_ws('-',
    left(a, 1),
    substring(a from 2 for 2),
    substring(a from 4 for 3),
    substring(a from 7 for 2),
    substring(a from 9 for 1),
    right(a, 3)
)
from (values ('abcd1234efgh')) s(a)

concat_ws函数将使用其第一个参数作为分隔符。