Cuando hablamos de letra capital, estamos hablando del estilo de texto en el que la primera letra de cada palabra aparece en mayúscula, y el resto de la palabra, en minúscula.
Es Decir, Algo Como Esta Frase Que Estás Leyendo Ahora Mismo, O Como El Título De Este Post.
Esto puede ser útil por ejemplo para formatear nombres propios de personas, o por ejemplo, nombres de ciudades: Gran Canaria.
En algunos lenguajes de programación, existen funciones ya predefinidas que te ofrecen esta posibilidad (como por ejemplo ucwords en PHP), pero … ¿y en lenguaje SQL?
En motores de gestión de base de datos como Oracle, contamos con una función predefinida que convierte a mayúsculas el primer caracter de cada palabra de una cadena: InitCap.
Sin embargo, en otros sistemas de gestión de base de datos como MySql o SqlServer, tendremos que «buscarnos la vida«.
A continuación veremos 2 funciones que nos permitirán modificar nuestras cadenas de texto combinando MAYÚSCULAS y minúsculas directamente en nuestras consultas SQL.
La idea es sencilla: recorreremos la cadena de texto letra por letra en búsqueda de espacios en blanco o cualquier otro carácter separador, marcando con ayuda de una bandera o flag, la indicación de que debemos convertir la siguiente letra en mayúscula.
Letra Capital / Mayúscula-Minúscula En MYSQL
DELIMITER $$
DROP FUNCTION IF EXISTS `test`.`UCWORDS` $$
CREATE FUNCTION `test`.`UCWORDS` (input VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
-- Declaración de variables
DECLARE i INT DEFAULT 0;
DECLARE length INT;
DECLARE flag TINYINT DEFAULT 1;
DECLARE output VARCHAR(255) DEFAULT '';
-- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
SET input = LOWER(input);
-- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
SET length = LENGTH(input);
-- Recorremos toda la cadena de texto
WHILE (i <= length) DO
IF (flag=1) THEN
-- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
SET output = CONCAT(output, UPPER(MID(input, i, 1)));
SET flag = 0;
ELSE
SET output = CONCAT(output, MID(input, i, 1));
END IF;
IF (MID(input, i, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) THEN
-- Hemos encontrado un espacio en blanco, por lo que activamos nuestra bandera para la próxima iteración.
SET flag = 1;
END IF;
SET i = i+1;
END WHILE;
RETURN output;
END $$
DELIMITER ;
Letra Capital / Mayúscula-Minúscula En SQLSERVER
-- =============================================
-- Author: v3rgu1.com
-- Description: Función que permite capitalizar
-- un String
-- =============================================
ALTER FUNCTION [dbo].[InitCap]
(
-- Parámetros
@INPUT AS VARCHAR(4000)
)
RETURNS VARCHAR(4000)
AS
BEGIN
-- Declaración de variables
DECLARE @I AS INT
DECLARE @LENGTH AS INT
DECLARE @FLAG AS BIT
DECLARE @OUTPUT AS VARCHAR(4000)
-- Inicializamos el contador a 0
SET @I = 0;
-- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
SET @INPUT = LOWER(@INPUT);
-- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
SET @LENGTH = LEN(@INPUT);
-- Inicializamos la bandera como activa para capitalizar la primera letra de la cadena
SET @FLAG = 1;
SET @OUTPUT = '';
-- Recorremos toda la cadena de texto
WHILE (@I <= @LENGTH) BEGIN
IF (@FLAG = 1) BEGIN
-- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
SET @OUTPUT = @OUTPUT + UPPER(SUBSTRING(@INPUT, @I, 1));
SET @FLAG = 0;
END ELSE BEGIN
SET @OUTPUT = @OUTPUT + SUBSTRING(@INPUT, @I, 1);
END
IF (SUBSTRING(@INPUT, @I, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) BEGIN
-- Hemos encontrado un espacio en blanco o algún caracter separados,
-- por lo que activamos nuestra bandera para la próxima iteración.
SET @FLAG = 1;
END
SET @I = @I + 1;
END -- WHILE
RETURN @OUTPUT
END
¡Te lo agradecemos!