UPPER

La función UPPER convierte todos los caracteres alfabéticos de una cadena a mayúsculas, sin alterar números, espacios ni signos. La función UCASE es su alias y se comporta de forma idéntica. Es la contrapartida de LOWER y comparte con ella las mismas consideraciones de colación y rendimiento.

Más allá de poner texto en mayúsculas para mostrarlo, UPPER se usa mucho como pieza de construcción para generar códigos, abreviaturas y etiquetas a partir de nombres existentes. En este artículo veremos su sintaxis, varios usos prácticos combinándola con otras funciones de cadena, y el mismo aviso de rendimiento que aplica a LOWER cuando se usa dentro de un WHERE.

Sintaxis

UPPER recibe una cadena y devuelve su versión en mayúsculas. UCASE es su alias directo.

UPPER(cadena)
-- Alias:
UCASE(cadena)

Ejemplo básico

La conversión es directa: cada letra minúscula se transforma en mayúscula.

SELECT UPPER('hola mundo') AS resultado;
resultado
HOLA MUNDO

Nombres en mayúsculas

Sobre columnas, UPPER devuelve la versión en mayúsculas de cada valor, lo que resulta útil para encabezados o etiquetas destacadas en informes:

SELECT UPPER(nombre) AS nombre_upper, UPPER(apellidos) AS apellidos_upper
FROM clientes
LIMIT 5;
nombre_upperapellidos_upper
MARÍAGARCÍA LÓPEZ
CARLOSRODRÍGUEZ MARTÍN
LAURALÓPEZ SÁNCHEZ
PEDROFERNÁNDEZ CASTRO
ANAMARTÍNEZ RUIZ

Generar códigos

Una aplicación muy práctica es derivar códigos cortos a partir de un nombre, tomando sus primeras letras con LEFT y pasándolas a mayúsculas. Combinado con DISTINCT puedes obtener códigos únicos por categoría:

SELECT
    nombre,
    UPPER(LEFT(nombre, 3)) AS codigo
FROM categorias;
nombrecodigo
ElectrónicaELE
Accesorios electrónicosACC
Hogar inteligenteHOG
AudioAUD
FotografíaFOT

Capitalizar la primera letra

MySQL no tiene una función nativa para capitalizar (poner solo la inicial en mayúscula), pero se consigue combinando varias funciones: UPPER sobre la primera letra con LEFT, LOWER sobre el resto con SUBSTRING, y CONCAT para unirlo todo:

SELECT
    nombre,
    CONCAT(UPPER(LEFT(nombre, 1)), LOWER(SUBSTRING(nombre, 2))) AS capitalizado
FROM categorias;
nombrecapitalizado
ElectrónicaElectrónica
Accesorios electrónicosAccesorios electrónicos
Hogar inteligenteHogar inteligente
AudioAudio
FotografíaFotografía

Ten en cuenta que esta técnica solo capitaliza la primera palabra. Para capitalizar cada palabra de una frase haría falta una función almacenada o procesarlo en la aplicación, ya que MySQL no ofrece un equivalente directo a un "title case".

Etiquetas de estado

UPPER es cómodo para resaltar valores categóricos, como el estado de un pedido, de forma uniforme y visualmente destacada:

SELECT id, UPPER(estado) AS estado
FROM pedidos
LIMIT 5;
idestado
1COMPLETADO
2COMPLETADO
3PENDIENTE
4ENVIADO
5COMPLETADO

UPPER con caracteres acentuados

Al igual que LOWER, UPPER maneja correctamente las letras acentuadas y la eñe cuando la columna usa utf8mb4, conservando los acentos sobre las mayúsculas:

SELECT UPPER('café español') AS resultado;
resultado
CAFÉ ESPAÑOL

Errores comunes

El error de rendimiento es idéntico al de LOWER: aplicar UPPER a una columna indexada dentro del WHERE impide que MySQL aproveche el índice, y además es innecesario con las colaciones _ci por defecto, que ya ignoran las mayúsculas en las comparaciones. Reserva UPPER en el WHERE para los casos con colaciones sensibles a mayúsculas.

Otro punto que sorprende es que la conversión de algunos caracteres no es perfectamente reversible entre UPPER y LOWER en todos los idiomas. Para texto en español el comportamiento es el esperado, pero en aplicaciones multilingües conviene comprobarlo con datos reales antes de confiar en la conversión.

Cuándo usar UPPER

UPPER es la elección adecuada para generar códigos y abreviaturas a partir de nombres, para destacar etiquetas o encabezados, y para normalizar valores categóricos al mostrarlos. Como con LOWER, evita usarla sobre columnas indexadas en el WHERE cuando la colación ya es insensible a mayúsculas, porque penaliza el rendimiento sin aportar nada.

En el siguiente artículo veremos TRIM, que elimina espacios y otros caracteres de los extremos de una cadena.

Escrito por Eduardo Lázaro