sql >> Database teknologi >  >> RDS >> Oracle

RPAD() Funktion i Oracle

I Oracle er RPAD() funktionen giver dig mulighed for at udfylde den højre del af en streng med et bestemt tegn, til et bestemt antal tegn.

Den måde, det fungerer på, er, at du angiver, hvor lang den resulterende streng skal være. Hvis den oprindelige streng er kortere, udfylder udfyldningstegnet den resterende plads.

Syntaks

Syntaksen ser sådan ud:

RPAD(expr1 , n [, expr2 ])

Hvor:

  • expr1 og expr2 kan være enhver af datatyperne CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB eller NCLOB .
  • n er et NUMBER heltal eller en værdi, der implicit kan konverteres til et NUMBER heltal.

Funktionen returnerer expr1 , højrepolstret til længden n tegn med rækkefølgen af ​​tegn i expr2 .

Hvis expr2 er udeladt, er udfyldningstegnet et enkelt blanktegn.

Eksempel

Her er et simpelt eksempel til at demonstrere:

SELECT RPAD('Cat', 25)
FROM DUAL;

Resultat:

              RPAD('CAT',25) 
____________________________ 
Cat                         

Det er ikke let at se effekten af ​​dette eksempel, fordi vi polstrede strengen med standardtegnet (et mellemrum), men det havde den effekt, at det skubbede bredden af ​​kolonnen ud.

Nedenfor er et andet eksempel, der viser effekten bedre:

SELECT RPAD('Cat', 15) || 'House'
FROM DUAL;

Resultat:

   RPAD('CAT',15)||'HOUSE' 
__________________________ 
Cat            House      

Sammenkædning af de to strenge afslører mængden af ​​polstring, der blev påført den højre del af strengen længst til venstre.

Bemærk, at det angivne tal er den samlede bredde af den resulterende streng – ikke mængden af ​​polstring.

Angiv et tegn

I dette eksempel angiver jeg et tegn, der skal bruges til udfyldningen:

SELECT RPAD('Cat', 7, '!')
FROM DUAL;

Resultat:

   RPAD('CAT',7,'!') 
____________________ 
Cat!!!!             

Padding mindre end den originale streng

Hvis det andet argument er mindre end den oprindelige streng, tilføjes ingen udfyldning, og den oprindelige streng forkortes til det angivne antal tegn:

SELECT RPAD('Cat', 2)
FROM DUAL;

Resultat:

   RPAD('CAT',2) 
________________ 
Ca              

Databaseeksempel

Her er et eksempel på udfyldning af den højre del af værdierne i en databasekolonne:

SELECT 
    country_name,
    RPAD(country_name, 12, '.') AS Padded
FROM countries
FETCH FIRST 5 ROWS ONLY;

Resultat:

   COUNTRY_NAME          PADDED 
_______________ _______________ 
Argentina       Argentina...    
Australia       Australia...    
Belgium         Belgium.....    
Brazil          Brazil......    
Canada          Canada......   

Nul-værdier

Hvis nogen af ​​argumenterne er null resultatet er null :

SET NULL 'null';

SELECT 
    RPAD(null, 3),
    RPAD('Cat', null),
    RPAD('Cat', 3, null)
FROM DUAL;

Resultat:

   RPAD(NULL,3)    RPAD('CAT',NULL)    RPAD('CAT',3,NULL) 
_______________ ___________________ _____________________ 
null            null                null                 

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Kalder RPAD() uden at sende nogen argumenter returnerer en fejl:

SELECT RPAD()
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT RPAD()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Og at sende det forkerte antal argumenter resulterer i en fejl:

SELECT RPAD('Cat', 1, '>', 2)
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT RPAD('Cat', 1, '>', 2)
FROM DUAL
Error at Command Line : 1 Column : 28
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Big Data med PostgreSQL og Apache Spark

  2. nær synatx-fejl (kode 1) indsæt Android SQLite

  3. Fejlfinding AlwaysOn – Nogle gange kræver det mange sæt øjne

  4. Er COUNT(rowid) hurtigere end COUNT(*)?