2017-02-24 4 views
0

zB Ich habe String Cardno = 1111111111111111 (16 Stellen)Wie Format-String-xxxx-xxxx-xxxx-xxxx in Postgres

Ich möchte Cardno durch die Formatierung hinzufügen Bindestrich (-) pro 4 Stellen:

1111-1111-1111-1111 
+1

Sie nicht nur Stick zufällige Datenbanken in als Tags. Bitte wählen Sie einen bestimmten aus, auf den sich Ihr Problem bezieht. – tadman

+1

Speichern von nackten Kartennummern direkt in einer Datenbank ist keine Standardpraxis. Verschlüsseln Sie stattdessen die Kartennummer und speichern Sie die Hash-Zeichenfolge in der Datenbank. – Daenarys

Antwort

1

Wenn Sie Postgres verwenden, können Sie die Vorteile der regexp_replace() Funktion übernehmen:

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 

Hier stellen wir übereinstimmen und erfassen die 16 Stellen in vier Gruppen, dann bauen den Austausch mit dashe s nach Ihren Anforderungen.

Wenn Sie MySQL verwenden, die nicht diese Art von regex Ersatz-Unterstützung bietet, werden Sie die Basis String-Funktionen verwenden müssen:

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

Danke Tim :) – Decode