2017-02-24 77 views
0

例如我有串cardNo = 1111111111111111(16位)如何格式化字符串XXXX-XXXX-XXXX-XXXX在Postgres的

我想格式化cardNo通过加破折号( - )每4位:

1111-1111-1111-1111 
+1

不要只是随机的数据库作为标签。请选择与您的问题相关的特定问题。 – tadman

+1

将裸露卡号直接保存到数据库中不是标准做法。而是加密卡号并将哈希字符串存储到数据库中。 – Daenarys

回答

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位四组,然后建立与大社更换s根据您的要求。

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

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

谢谢蒂姆:) – Decode