LPAD
La función LPAD rellena una cadena por la izquierda con un carácter o texto hasta alcanzar una longitud determinada. Su nombre viene de "Left Pad", y es la función complementaria de RPAD, que rellena por la derecha.
Su uso más característico es dar formato a números convirtiéndolos en cadenas de ancho fijo con ceros a la izquierda, como transformar el identificador 42 en 00042. Esto es habitual para generar códigos legibles (referencias de pedido, números de factura) y para alinear valores a la derecha en informes de texto. En este artículo veremos su sintaxis, sus usos típicos, un comportamiento importante cuando la cadena es más larga de lo previsto y cómo se combina con otras funciones.
Sintaxis
LPAD recibe la cadena original, la longitud total deseada y el carácter o caracteres con los que rellenar el hueco por la izquierda.
LPAD(cadena, longitud, relleno)Sus argumentos son:
cadena: el texto original que se quiere rellenarlongitud: la longitud total que debe tener el resultadorelleno: el carácter o caracteres que completan por la izquierda
Ejemplo básico
El caso más representativo es rellenar un número con ceros hasta una anchura fija. Aquí 42 se completa con ceros hasta ocupar cinco caracteres:
SELECT LPAD('42', 5, '0') AS resultado;| resultado |
|---|
| 00042 |
El relleno puede ser cualquier carácter, no solo el cero, lo que sirve para fines decorativos o de alineación:
SELECT LPAD('MySQL', 10, '*') AS resultado;| resultado |
|---|
| *****MySQL |
Formatear identificadores con ceros
Aplicado sobre una columna numérica, LPAD la convierte a texto y la rellena, generando identificadores de ancho uniforme. Observa que el id numérico se transforma automáticamente en cadena:
SELECT
id,
LPAD(id, 6, '0') AS id_formateado
FROM productos
LIMIT 5;| id | id_formateado |
|---|---|
| 1 | 000001 |
| 2 | 000002 |
| 3 | 000003 |
| 4 | 000004 |
| 5 | 000005 |
Generar códigos de pedido
Combinando LPAD con CONCAT se obtienen códigos con prefijo, un patrón muy común para presentar referencias legibles al usuario:
SELECT
id,
CONCAT('PED-', LPAD(id, 6, '0')) AS codigo_pedido,
estado
FROM pedidos
LIMIT 5;| id | codigo_pedido | estado |
|---|---|---|
| 1 | PED-000001 | completado |
| 2 | PED-000002 | completado |
| 3 | PED-000003 | pendiente |
| 4 | PED-000004 | enviado |
| 5 | PED-000005 | completado |
Conviene tener presente que este formato es para mostrar: en la base de datos el identificador sigue siendo el número original. No se debe almacenar el valor rellenado en lugar del número, porque dificultaría las operaciones y ordenaciones numéricas.
Relleno con varios caracteres
Si el relleno tiene más de un carácter, MySQL repite el patrón tantas veces como haga falta y lo corta al llegar a la longitud pedida:
SELECT LPAD('X', 10, 'ab') AS resultado;| resultado |
|---|
| ababababaX |
Cuando la cadena es más larga que la longitud
Este es el comportamiento más importante a conocer y la fuente de errores más habitual. Si la cadena original ya es más larga que la longitud indicada, LPAD no la deja intacta: la trunca por la derecha hasta ajustarla a esa longitud. LPAD siempre devuelve una cadena de exactamente la longitud pedida.
SELECT LPAD('MySQL Tutorial', 5, '*') AS resultado;| resultado |
|---|
| MySQL |
Esto significa que LPAD puede recortar datos sin avisar. Si quieres rellenar pero nunca truncar, debes comprobar antes la longitud real con CHAR_LENGTH y elegir una longitud de destino suficiente.
Alinear valores a la derecha
Como LPAD añade el relleno por delante, sirve para alinear números o precios a la derecha en informes de texto. Combinado con FORMAT, que da formato con separadores, se obtiene una columna de importes alineada:
SELECT
nombre,
LPAD(FORMAT(precio, 2), 10, ' ') AS precio_alineado
FROM productos
LIMIT 5;| nombre | precio_alineado |
|---|---|
| iPhone 15 Pro | 1,299.99 |
| MacBook Air M2 | 1,199.99 |
| AirPods Pro | 249.99 |
| iPad Air | 599.99 |
| Apple Watch Series 9 | 399.99 |
LPAD con NULL
Como el resto de funciones de cadena, propaga el valor NULL: si la cadena de entrada es nula, el resultado también lo es:
SELECT LPAD(NULL, 5, '0') AS resultado;| resultado |
|---|
| NULL |
Errores comunes
El error más serio, ya comentado, es no contar con el truncamiento. Quien usa LPAD solo pensando en "rellenar" se sorprende cuando un valor más largo de lo previsto aparece cortado. La función garantiza una longitud exacta, lo que implica recortar tanto como rellenar.
El segundo malentendido es almacenar el valor formateado con ceros en la propia columna en lugar de generarlo al mostrar. Guardar '00042' en vez de 42 convierte un número en texto, rompe las ordenaciones numéricas y complica los cálculos. El relleno con ceros debe ser siempre una cuestión de presentación.
Cuándo usar LPAD
LPAD es la elección adecuada para dar formato a números con ceros a la izquierda, generar códigos de ancho fijo y alinear valores a la derecha en salidas de texto. Cuando lo que necesitas es rellenar por el otro lado (texto alineado a la izquierda o campos de ancho fijo que empiezan por el dato), la función indicada es RPAD.
En el siguiente artículo veremos RPAD, que rellena la cadena por la derecha.
Escrito por Eduardo Lázaro
