En SQL, RPAD()
se utiliza para rellenar la parte derecha de una cadena con un carácter específico. La función se puede usar en cadenas y números, aunque dependiendo del DBMS, es posible que los números deban pasarse como una cadena antes de que se puedan rellenar.
DBMS que tienen un RPAD()
incluyen MySQL, MariaDB, PostgreSQL y Oracle.
DBMS que no tener un RPAD()
La función incluye SQL Server y SQLite.
Ejemplo
Aquí hay un ejemplo para demostrar el RPAD()
función:
SELECT RPAD('Look Right', 40);
Resultado:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+
Aquí, la parte derecha de la cadena se rellena con un espacio (el carácter de relleno predeterminado) y la cadena resultante tiene 40 caracteres (porque especifiqué 40
como segundo argumento).
Oracle funciona igual, pero necesitamos usar FROM DUAL
al hacer una consulta como esta (sin consultar una tabla real):
SELECT RPAD('Look Right', 40)
FROM DUAL;
Resultado:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
En los ejemplos anteriores, utilicé mucho relleno para que el relleno fuera evidente.
Aquí hay otro ejemplo que puede demostrar el relleno correcto más claramente:
SELECT CONCAT(RPAD('abc', 4), 'def');
Resultado:
abc def
En este caso, concatené abc
con def
pero abc
tenía el relleno derecho aplicado con el RPAD()
función.
Especifique un carácter de relleno
El relleno no necesariamente tiene que ser un espacio. Opcionalmente, podemos agregar un tercer argumento para especificar el carácter (o caracteres) que se usará en el relleno.
SELECT RPAD('Rat', 4, 't');
Resultado:
Ratt
También se puede utilizar para rellenar números con ceros (u otro dígito):
SELECT RPAD('7', 3, '0');
Resultado:
700
Obviamente, esto cambia el número y, en este caso, se podría haber logrado lo mismo simplemente multiplicando el número por 100. Sin embargo, multiplicar un número en realidad no aplica el relleno.
El siguiente ejemplo demuestra lo que quiero decir:
SELECT RPAD('77', 3, '0');
Resultado:
770
Multiplicar 77 por 100 habría tenido un resultado incorrecto.
En los ejemplos anteriores, pasé el número como una cadena.
En algunos DBMS (como MariaDB y MySQL) podemos pasar el número como un número, así como el número para rellenarlo:
SELECT RPAD(7, 3, 0);
Resultado:
700
También podemos hacer esto en Oracle:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Resultado:
700
Pero PostgreSQL tiene un problema con esto:
SELECT RPAD(7, 3, 0);
Resultado:
ERROR: function rpad(integer, integer, integer) does not exist
Servidor SQL
SQL Server no tiene un RPAD()
función, pero eso no nos impide agregar relleno a números y cadenas.
Números
Si el número tiene una parte fraccionaria, el FORMAT()
la función será suficiente:
SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
Resultado:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
La forma en que funciona es que pasamos el número, seguido de una cadena de formato. En el ejemplo anterior, la cadena de formato consta de especificadores de formato numérico personalizados que dan como resultado que el número original tenga dígitos agregados a su parte fraccionaria. Si aún no hay tantos dígitos en el número original, entonces se rellena con ceros.
Pero si el número no tiene una parte fraccionaria, entonces podemos usar REPLACE()
función para eliminar el separador decimal que se aplica con FORMAT()
función:
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";
Resultado:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
Este método también se puede usar para agregar ceros a la izquierda si es necesario. Simplemente agréguelos a la izquierda del punto decimal en la cadena de formato.
Aquí, Utilicé explícitamente en-US
como tercer argumento (opcional) para garantizar que el separador decimal sea un punto/punto, que es la convención utilizada por en-US
configuración regional.
Texto
Aquí hay una técnica que se puede usar en datos textuales:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Resultado:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
Aunque deberá tener cuidado de no cortar accidentalmente parte de la cadena o agregar espacios no deseados.