sql >> Base de Datos >  >> NoSQL >> MongoDB

SQL RPAD()

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.