sql >> Databasteknik >  >> NoSQL >> MongoDB

SQL RPAD()

I SQL, RPAD() används för att fylla den högra delen av en sträng med ett specificerat tecken. Funktionen kan användas på strängar och siffror, men beroende på DBMS kan siffror behöva skickas som en sträng innan de kan utfyllas.

DBMS som har en RPAD() funktioner inkluderar MySQL, MariaDB, PostgreSQL och Oracle.

DBMS som inte gör det har en RPAD() funktioner inkluderar SQL Server och SQLite.

Exempel

Här är ett exempel för att demonstrera RPAD() funktion:

SELECT RPAD('Look Right', 40);

Resultat:

+------------------------------------------+
| RPAD('Look Right', 40)                   |
+------------------------------------------+
| Look Right                               |
+------------------------------------------+

Här är den högra delen av strängen utfylld med ett mellanslag (standard utfyllnadstecken), och den resulterande strängen är 40 tecken lång (eftersom jag angav 40 som det andra argumentet).

Oracle fungerar på samma sätt, men vi måste använda FROM DUAL när du gör en fråga som denna (utan att fråga en faktisk tabell):

SELECT RPAD('Look Right', 40) 
FROM DUAL;

Resultat:

                       RPAD('LOOKRIGHT',40) 
___________________________________________ 
Look Right                                 

I exemplen ovan använde jag mycket stoppning för att göra stoppningen tydlig.

Här är ett annat exempel som kan visa rätt stoppning tydligare:

SELECT CONCAT(RPAD('abc', 4), 'def');

Resultat:

abc def

I det här fallet sammanfogade jag abc med def men abc hade rätt utfyllnad tillämpad med RPAD() funktion.

Ange en utfyllnadstecken

Vadderingen behöver inte nödvändigtvis vara ett mellanslag. Vi kan valfritt lägga till ett tredje argument för att specificera tecknet (eller tecknen) som ska användas i utfyllnaden.

SELECT RPAD('Rat', 4, 't');

Resultat:

Ratt

Den kan också användas för att räta ut nummer med nollor (eller en annan siffra):

SELECT RPAD('7', 3, '0');

Resultat:

700

Detta ändrar uppenbarligen talet och i det här fallet kunde detsamma ha uppnåtts helt enkelt genom att multiplicera talet med 100. Men att multiplicera ett tal tillämpar faktiskt inte utfyllnad på det.

Följande exempel visar vad jag menar:

SELECT RPAD('77', 3, '0');

Resultat:

770

Att multiplicera 77 med 100 skulle ha fått fel resultat.

I exemplen ovan skickade jag numret som en sträng.

I vissa DBMS:er (som MariaDB och MySQL) kan vi skicka numret som ett nummer, såväl som numret att fylla det med:

SELECT RPAD(7, 3, 0);

Resultat:

700

Vi kan också göra detta i Oracle:

SELECT RPAD(7, 3, 0) 
FROM DUAL;

Resultat:

700

Men PostgreSQL har ett problem med detta:

SELECT RPAD(7, 3, 0);

Resultat:

ERROR:  function rpad(integer, integer, integer) does not exist

SQL-server

SQL Server har ingen RPAD() funktion, men det hindrar oss inte från att lägga till utfyllnad till siffror och strängar.

Siffror

Om talet har en bråkdel, FORMAT() funktionen räcker:

SELECT 
    FORMAT(0.7, '.000') AS "1",
    FORMAT(0.7, '0.00') AS "2",
    FORMAT(7.0, '0.00') AS "3";

Resultat:

+------+------+------+
| 1    | 2    | 3    |
|------+------+------|
| .700 | 0.70 | 7.00 |
+------+------+------+

Så det fungerar är att vi skickar numret, följt av en formatsträng. I exemplet ovan består formatsträngen av anpassade numeriska formatspecifikationer som resulterar i att det ursprungliga numret har siffror tillagda i sin bråkdel. Om det inte redan finns så många siffror i det ursprungliga numret är det utfyllt med nollor.

Men om talet inte har en bråkdel kan vi använda REPLACE() funktion för att ta bort decimalavgränsaren som används med FORMAT() 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";

Resultat:

+-----+------+------+
| 1   | 2    | 3    |
|-----+------+------|
| 700 | 1700 | 7350 |
+-----+------+------+

Denna metod kan också användas för att lägga till inledande nollor om det behövs. Lägg bara till dem till vänster om decimaltecknet i formatsträngen.

Här jag använde uttryckligen en-US som det (valfria) tredje argumentet för att säkerställa att decimalavgränsaren är en punkt/punkt, vilket är konventionen som används av en-US språk.

Text

Här är en teknik som kan användas på textdata:

SELECT 
    LEFT('Dog' + '.........', 9) AS "1",
    LEFT('Horse' + '.........', 9) AS "2",
    LEFT('Crocodile' + '.........', 9) AS "3";

Resultat:

+-----------+-----------+-----------+
| 1         | 2         | 3         |
|-----------+-----------+-----------|
| Dog...... | Horse.... | Crocodile |
+-----------+-----------+-----------+

Även om du måste vara försiktig så att du inte av misstag hugger av en del av snöret eller lägger till oönskade mellanslag.


  1. Villkorlig $summa i MongoDB

  2. MongoDB findOneAndDelete()

  3. Delade sessioner mellan nodappar?

  4. Omdirigera utdata från mongo-frågan till en csv-fil