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 rellenar
  • longitud: la longitud total que debe tener el resultado
  • relleno: 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;
idid_formateado
1000001
2000002
3000003
4000004
5000005

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;
idcodigo_pedidoestado
1PED-000001completado
2PED-000002completado
3PED-000003pendiente
4PED-000004enviado
5PED-000005completado

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;
nombreprecio_alineado
iPhone 15 Pro1,299.99
MacBook Air M21,199.99
AirPods Pro249.99
iPad Air599.99
Apple Watch Series 9399.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