Algunos RDBMS proporcionan un LPAD()
y RPAD()
función que nos permite rellenar a la izquierda o a la derecha una cadena. Algunas funciones también nos permiten agregar ceros iniciales o finales.
A continuación se muestran ejemplos de la aplicación de relleno SQL en algunos de los RDBMS más populares.
Oráculo
Oracle nos proporciona LPAD()
y RPAD()
específicamente para rellenar la parte izquierda o derecha de una cadena:
SELECT LPAD('Cat', 20)
FROM DUAL;
Resultado:
LPAD('CAT',20) _______________________ Cat
En este caso usé LPAD()
para aplicar el relleno izquierdo, y la cadena resultante tiene 20 caracteres, porque eso es lo que usé para el segundo argumento.
El resultado se rellena con un espacio, porque ese es el carácter predeterminado que se usa para el relleno. Si no especifica con qué carácter rellenar la cadena, se usa un espacio.
Puede agregar un tercer carácter para especificar qué carácter usar para el relleno:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Resultado:
LPAD('7',3,'0') __________________ 007
En este caso, rellené un número con ceros (aunque el resultado es una cadena).
Oracle también tiene un TO_CHAR(number)
función que se puede usar para agregar ceros a la izquierda de un número:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Resultado:
007
El 0
El elemento de formato representa cada dígito en el número original y cero si no existe ningún dígito en esa posición en el número original.
PostgreSQL
PostgreSQL también tiene su propio LPAD()
y RPAD()
funciones:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Resultado:
Left Padding | Right Padding | Both --------------+---------------+------- 007 | 700 | 00700
Y también tiene su propio TO_CHAR()
función que funciona de manera muy similar a la función de Oracle del mismo nombre:
SELECT TO_CHAR(7, 'fm000');
Resultado:
007
MariaDB
MariaDB tiene su propio LPAD()
y RPAD()
funciones:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Resultado:
+--------------+---------------+-------+ | Left Padding | Right Padding | Both | +--------------+---------------+-------+ | 007 | 700 | 00700 | +--------------+---------------+-------+
Y aunque MariaDB tiene su propio TO_CHAR()
función, no funciona en números (está limitado a valores de fecha y hora).
MySQL
MySQL también tiene su propio LPAD()
y RPAD()
funciones.
Aquí hay un ejemplo del uso de LPAD()
contra una columna de la base de datos:
SELECT Genre, LPAD(Genre, 10, '.')
FROM Genres;
Resultado:
+---------+----------------------+ | Genre | LPAD(Genre, 10, '.') | +---------+----------------------+ | Rock | ......Rock | | Jazz | ......Jazz | | Country | ...Country | | Pop | .......Pop | | Blues | .....Blues | | Hip Hop | ...Hip Hop | | Rap | .......Rap | | Punk | ......Punk | +---------+----------------------+
Servidor SQL
SQL Server es un poco anómalo porque no tiene un LPAD()
o RPAD()
función.
Sin embargo, SQL Server tiene un FORMAT()
función que nos permite rellenar fácilmente números con ceros a la izquierda:
SELECT FORMAT(7, '000');
Resultado:
007
El segundo argumento es una cadena de formato numérico personalizado que determina cuántos caracteres tendrá la cadena resultante. El hecho de que usé ceros significa que el resultado tendrá ceros a la izquierda si es necesario.
Para rellenar cadenas en SQL Server, podemos hacer algo como esto:
SELECT RIGHT('.......' + 'Cat', 7);
Resultado:
....Cat
Hay varias otras técnicas que podemos usar para aplicar relleno en SQL Server.