In SQL RPAD()
wird verwendet, um den rechten Teil einer Zeichenfolge mit einem bestimmten Zeichen aufzufüllen. Die Funktion kann auf Zeichenfolgen und Zahlen angewendet werden, obwohl Zahlen je nach DBMS möglicherweise als Zeichenfolge übergeben werden müssen, bevor sie aufgefüllt werden können.
DBMSs, die ein RPAD()
haben Funktion gehören MySQL, MariaDB, PostgreSQL und Oracle.
DBMSs, die nicht ein RPAD()
haben Funktion umfassen SQL Server und SQLite.
Beispiel
Hier ist ein Beispiel zur Demonstration von RPAD()
Funktion:
SELECT RPAD('Look Right', 40);
Ergebnis:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+
Hier wird der rechte Teil der Zeichenfolge mit einem Leerzeichen aufgefüllt (das standardmäßige Füllzeichen), und die resultierende Zeichenfolge ist 40 Zeichen lang (weil ich 40
angegeben habe als zweites Argument).
Oracle funktioniert genauso, aber wir müssen FROM DUAL
verwenden wenn Sie eine Abfrage wie diese durchführen (ohne eine tatsächliche Tabelle abzufragen):
SELECT RPAD('Look Right', 40)
FROM DUAL;
Ergebnis:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
In den obigen Beispielen habe ich viel Polsterung verwendet, um die Polsterung sichtbar zu machen.
Hier ist ein weiteres Beispiel, das die richtige Polsterung deutlicher demonstrieren kann:
SELECT CONCAT(RPAD('abc', 4), 'def');
Ergebnis:
abc def
In diesem Fall habe ich abc
verkettet mit def
sondern abc
hatte richtiges Padding mit RPAD()
angewendet Funktion.
Geben Sie ein Füllzeichen an
Die Polsterung muss nicht unbedingt ein Leerzeichen sein. Wir können optional ein drittes Argument hinzufügen, um das Zeichen (oder die Zeichen) anzugeben, die in der Auffüllung verwendet werden sollen.
SELECT RPAD('Rat', 4, 't');
Ergebnis:
Ratt
Es kann auch verwendet werden, um Zahlen mit Nullen (oder einer anderen Ziffer) aufzufüllen:
SELECT RPAD('7', 3, '0');
Ergebnis:
700
Dies ändert offensichtlich die Zahl, und in diesem Fall hätte dasselbe einfach durch Multiplizieren der Zahl mit 100 erreicht werden können. Allerdings wird beim Multiplizieren einer Zahl nicht wirklich aufgefüllt.
Das folgende Beispiel zeigt, was ich meine:
SELECT RPAD('77', 3, '0');
Ergebnis:
770
Eine Multiplikation von 77 mit 100 hätte das falsche Ergebnis gehabt.
In den obigen Beispielen habe ich die Zahl als String übergeben.
In einigen DBMS (wie MariaDB und MySQL) können wir die Nummer als Zahl übergeben, sowie die Zahl, mit der sie aufgefüllt werden soll:
SELECT RPAD(7, 3, 0);
Ergebnis:
700
Wir können dies auch in Oracle tun:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Ergebnis:
700
Aber PostgreSQL hat damit ein Problem:
SELECT RPAD(7, 3, 0);
Ergebnis:
ERROR: function rpad(integer, integer, integer) does not exist
SQL-Server
SQL Server hat kein RPAD()
Funktion, aber das hindert uns nicht daran, Zahlen und Zeichenfolgen aufzufüllen.
Zahlen
Wenn die Zahl einen Bruchteil hat, wird das FORMAT()
Funktion genügt:
SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
Ergebnis:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
Das funktioniert so, dass wir die Nummer übergeben, gefolgt von einem Format-String. Im obigen Beispiel besteht die Formatzeichenfolge aus benutzerdefinierten numerischen Formatbezeichnern, die dazu führen, dass der ursprünglichen Zahl Ziffern zu ihrem Bruchteil hinzugefügt werden. Wenn die ursprüngliche Nummer nicht schon so viele Ziffern enthält, wird sie mit Nullen aufgefüllt.
Wenn die Zahl jedoch keinen Bruchteil hat, können wir REPLACE()
verwenden Funktion zum Entfernen des Dezimaltrennzeichens, das mit FORMAT()
angewendet wird Funktion:
SELECT
REPLACE(FORMAT(7, '.00', 'en-US'), '.', '') AS "1",
REPLACE(FORMAT(17, '.00', 'en-US'), '.', '') AS "2",
REPLACE(FORMAT(73.5, '.00', 'en-US'), '.', '') AS "3";
Ergebnis:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
Diese Methode kann auch verwendet werden, um bei Bedarf führende Nullen hinzuzufügen. Fügen Sie sie einfach links vom Dezimalpunkt in den Formatstring ein.
Hier habe ich explizit en-US
verwendet als (optionales) drittes Argument, um sicherzustellen, dass das Dezimaltrennzeichen ein Punkt/Punkt ist, was der Konvention entspricht, die von en-US
verwendet wird Gebietsschema.
Text
Hier ist eine Technik, die auf Textdaten angewendet werden kann:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Ergebnis:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
Obwohl Sie darauf achten müssen, nicht versehentlich einen Teil der Zeichenfolge abzuschneiden oder unerwünschte Leerzeichen hinzuzufügen.