sql >> Database teknologi >  >> NoSQL >> MongoDB

SQL RPAD()

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.


  1. hvordan man sender en variabel til et regex

  2. Integration af ClusterControl med SNMP:Anden del

  3. MongoDB VÆLG ANTALGRUPPE EFTER

  4. Omdiriger output af mongo-forespørgsel til en csv-fil