I SQL, RPAD()
bruges til at udfylde den højre del af en streng med et specificeret tegn. Funktionen kan bruges på strenge og tal, men afhængigt af DBMS skal tal muligvis sendes som en streng, før de kan udfyldes.
DBMS'er, der har en RPAD()
funktioner omfatter MySQL, MariaDB, PostgreSQL og Oracle.
DBMS'er, der ikke har en RPAD()
funktion omfatter SQL Server og SQLite.
Eksempel
Her er et eksempel til at demonstrere RPAD()
funktion:
SELECT RPAD('Look Right', 40);
Resultat:
+--------------------------------------------------+| RPAD('Se til højre', 40) |+---------------------------------------------------- ---+| Se til højre |+--------------------------------------------------+
Her er den højre del af strengen polstret med et mellemrum (standard udfyldningstegn), og den resulterende streng er 40 tegn lang (fordi jeg specificerede 40
som det andet argument).
Oracle fungerer på samme måde, men vi skal bruge FROM DUAL
når du laver en forespørgsel som denne (uden at forespørge en egentlig tabel):
SELECT RPAD('Look Right', 40)
FROM DUAL;
Resultat:
RPAD('LOOKRIGHT',40) __________________________________________ Se rigtigt
I ovenstående eksempler brugte jeg meget polstring for at gøre polstringen tydelig.
Her er et andet eksempel, der kan demonstrere den rigtige polstring mere tydeligt:
SELECT CONCAT(RPAD('abc', 4), 'def');
Resultat:
abc def
I dette tilfælde sammenkædede jeg abc
med def
men abc
havde den rigtige polstring anvendt med RPAD()
funktion.
Angiv et udfyldningstegn
Polstringen behøver ikke nødvendigvis at være et mellemrum. Vi kan eventuelt tilføje et tredje argument for at specificere tegnet (eller tegnene), der skal bruges i udfyldningen.
SELECT RPAD('Rat', 4, 't');
Resultat:
Ratt
Den kan også bruges til at rette tastaturnumre med nuller (eller et andet ciffer):
SELECT RPAD('7', 3, '0');
Resultat:
700
Dette ændrer naturligvis tallet, og i dette tilfælde kunne det samme være opnået ved blot at gange tallet med 100. Men at gange et tal anvender det faktisk ikke udfyldning på det.
Følgende eksempel viser, hvad jeg mener:
SELECT RPAD('77', 3, '0');
Resultat:
770
At gange 77 med 100 ville have haft det forkerte resultat.
I ovenstående eksempler har jeg givet nummeret som en streng.
I nogle DBMS'er (såsom MariaDB og MySQL) kan vi videregive nummeret som et tal, såvel som nummeret, det skal fyldes med:
SELECT RPAD(7, 3, 0);
Resultat:
700
Vi kan også gøre dette i Oracle:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Resultat:
700
Men PostgreSQL har et problem med dette:
SELECT RPAD(7, 3, 0);
Resultat:
FEJL:Funktionen rpad(heltal, heltal, heltal) eksisterer ikke
SQL-server
SQL Server har ikke en RPAD()
funktion, men det forhindrer os ikke i at tilføje polstring til tal og strenge.
Numre
Hvis tallet har en brøkdel, er FORMAT()
funktion vil være tilstrækkelig:
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 |+------+------+------+
Måden det fungerer på er, at vi sender nummeret efterfulgt af en formatstreng. I ovenstående eksempel består formatstrengen af brugerdefinerede numeriske formatspecifikationer, der resulterer i, at det oprindelige tal har cifre tilføjet til dets brøkdel. Hvis der ikke allerede er så mange cifre i det oprindelige nummer, så er det polstret med nuller.
Men hvis tallet ikke har en brøkdel, så kan vi bruge REPLACE()
funktion til at fjerne decimalseparatoren, der er anvendt 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 |+-----+------+------+
Denne metode kan også bruges til at tilføje indledende nuller, hvis det er nødvendigt. Du skal blot tilføje dem til venstre for decimaltegnet i formatstrengen.
Her brugte jeg udtrykkeligt en-US
som det (valgfrie) tredje argument for at sikre, at decimaladskilleren er et punktum/punktum, hvilket er den konvention, der bruges af en-US
landestandard.
Tekst
Her er en teknik, der kan bruges på tekstdata:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Resultat:
+-------+---------------+| 1 | 2 | 3 ||-----------+-----------+--------|| Hund...... | Hest.... | Krokodille |+-----------+------------+-----------+
Selvom du skal passe på ikke ved et uheld at hugge en del af strengen af eller tilføje uønskede mellemrum.