In postgreSQL werden links Nullen aufgefüllt

103

Ich bin relativ neu in PostgreSQL und weiß, wie man in SQL Server eine Zahl mit Nullen links auffüllt, aber ich habe Schwierigkeiten, dies in PostgreSQL herauszufinden.

Ich habe eine Zahlenspalte, in der die maximale Anzahl von Ziffern 3 und die minimale 1 ist: Wenn es eine Ziffer ist, hat es zwei Nullen links und wenn es 2 Ziffern sind, hat es 1, z. B. 001, 058, 123.

In SQL Server kann ich Folgendes verwenden:

RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2]

Dies ist in PostgreSQL nicht vorhanden. Jede Hilfe wäre dankbar.

Ben
quelle
2
Mit Google habe ich genau diese Seite gefunden. Es war mein bestes Google-Ergebnis.
Jason
Mögliches Duplikat der Funktion to_char (number) in postgres
Evan Carroll
Apropos SQL Server, sie haben die format()Funktion, mit der Sie verwenden können format(Column1,'000') as Column2.
Manngo

Antworten:

179

Mit den Funktionen rpadund lpadkönnen Sie die Nummern nach rechts bzw. links auffüllen. Beachten Sie, dass dies nicht direkt für Zahlen funktioniert. Sie müssen sie daher verwenden ::charoder ::textumwandeln:

SELECT RPAD(numcol::text, 3, '0'), -- Zero-pads to the right up to the length of 3
       LPAD(numcol::text, 3, '0'), -- Zero-pads to the left up to the length of 3
FROM   my_table
Mureinik
quelle
2
@EvanCarroll das ist die richtige Antwort - wovon redest du?
Yarin
@Yarin Diese Antwort ist die standardisierte Ein-Funktions- Aufrufmethode mit Formatzeichenfolgen . Mit RPAD / LPAD konvertieren Sie in Zeichenfolgen und verarbeiten dann die Zeichenfolgen. Mit to_char geben Sie lediglich eine andere Methode zum Stringifizieren an.
Evan Carroll
3
@EvanCarroll beide sind nützlich - hier können Sie eine Zahl für die Zeichenfolgenlänge angeben - bei der anderen müssen Sie wissen, dass 'fm' für den
Brian Burns
WARNUNG: Im Gegensatz zum Klassiker zerschneiden printfdiese knochenköpfigen Funktionen Ihre Saite lautlos, wenn sie nicht passt. Vielleicht brauchen Sie eine case when length(foo) ...um ihn herum.
Sam Watkins
62

Die to_char()Funktion dient zum Formatieren von Zahlen:

select to_char(column_1, 'fm000') as column_2
from some_table;

Das fmPräfix ("Füllmodus") vermeidet führende Leerzeichen im resultierenden Varchar. Das 000definiert einfach die Anzahl der Stellen, die Sie haben möchten.

psql (9.3.5)
Geben Sie "help" ein, um Hilfe zu erhalten.

postgres => mit sample_numbers (nr) as (
postgres (> Werte (1), (11), (100)
postgres (>)
postgres-> wähle to_char (nr, 'fm000')
postgres-> from sample_numbers;
 to_char
---------
 001
 011
 100
(3 Reihen)

postgres =>

Weitere Informationen zum Formatbild finden Sie im Handbuch:
http://www.postgresql.org/docs/current/static/functions-formatting.html

ein Pferd ohne Name
quelle
2
Wenn die Nummer zu lang ist, to_charkonvertiert sie in ###. Oo
Sam Watkins
Ich bin gespannt, ob es eine Lösung für das Problem gibt, bei der #, wenn es länger als in to_Char angegeben ist, in ### konvertiert wird. Gibt es sowieso eine bestimmte Mindestanzahl von Nullen und wachsen dann größere Zahlen daraus? Wenn Sie beispielsweise 3 für lpad angeben, werden die Zahlen wie folgt formatiert: 001 010 100 .. 1001
mike hennessy