如何在Postgres中格式化字符串xxxx-xxxx-xxxx-xxxx

时间:2017-02-24 06:01:24

标签: sql postgresql string-formatting

例如我有字符串cardNo = 1111111111111111(16位)

我想通过每4位数添加短划线( - )来格式化cardNo:

1111-1111-1111-1111

1 个答案:

答案 0 :(得分:1)

如果您使用的是Postgres,则可以利用regexp_replace()功能:

SELECT regexp_replace(t.col::text, '(\d{4})(\d{4})(\d{4})(\d{4})', '\1-\2-\3-\4', 'g')
FROM
(
    SELECT 1111111111111111 AS col
) t

在这里,我们匹配并捕获四组中的16位数字,然后根据您的要求使用破折号构建替换。

如果你使用的MySQL没有这种类型的正则表达式替换支持,你将不得不使用基本字符串函数:

SELECT CONCAT(SUBSTRING(col, 1, 4), '-', SUBSTRING(col, 5, 4), '-',
              SUBSTRING(col, 9, 4), '-', SUBSTRING(col, 13, 4))
FROM yourTable