MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

SQL-RPAD()

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.