sql >> Base de Datos >  >> RDS >> Oracle

Función RPAD() en Oracle

En Oracle, el RPAD() La función le permite rellenar la parte derecha de una cadena con un carácter determinado, hasta un número específico de caracteres.

La forma en que funciona es que usted especifica qué tan larga debe ser la cadena resultante. Si la cadena original es más corta, el carácter de relleno llena el espacio restante.

Sintaxis

La sintaxis es así:

RPAD(expr1 , n [, expr2 ])

Dónde:

  • expr1 y expr2 puede ser cualquiera de los tipos de datos CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB o NCLOB .
  • n es un NUMBER entero o un valor que se puede convertir implícitamente en un NUMBER entero.

La función devuelve expr1 , con relleno a la derecha hasta la longitud n caracteres con la secuencia de caracteres en expr2 .

Si expr2 se omite, el carácter de relleno es un solo espacio en blanco.

Ejemplo

Aquí hay un ejemplo simple para demostrarlo:

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

Resultado:

              RPAD('CAT',25) 
____________________________ 
Cat                         

No es fácil ver el efecto de este ejemplo, porque rellenamos la cadena con el carácter predeterminado (un espacio), pero tuvo el efecto de desplazar el ancho de la columna.

A continuación se muestra otro ejemplo que demuestra mejor el efecto:

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

Resultado:

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

La concatenación de las dos cadenas revela la cantidad de relleno que se aplicó a la parte derecha de la cadena más a la izquierda.

Tenga en cuenta que el número proporcionado es el ancho total de la cadena resultante:no la cantidad de relleno.

Especifique un carácter

En este ejemplo, especifico un carácter para usar como relleno:

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

Resultado:

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

Relleno más pequeño que la cadena original

Si el segundo argumento es menor que la cadena original, no se agrega relleno y la cadena original se acorta al número de caracteres especificado:

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

Resultado:

   RPAD('CAT',2) 
________________ 
Ca              

Ejemplo de base de datos

Aquí hay un ejemplo de cómo rellenar la parte derecha de los valores en una columna de base de datos:

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

Resultado:

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

Valores nulos

Si alguno de los argumentos es null el resultado es null :

SET NULL 'null';

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

Resultado:

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

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Recuento de argumentos incorrecto

Llamando a RPAD() sin pasar ningún argumento devuelve un error:

SELECT RPAD()
FROM DUAL;

Resultado:

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:

Y pasar el número incorrecto de argumentos da como resultado un error:

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

Resultado:

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: