Analizar y dar formato a cadenas
SUBSTRING, posición, división y conversión de mayúsculas y minúsculas entre distintos dialectos.
Analizar y dar formato a cadenas es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.
Por qué preguntan sobre las funciones de cadenas
Los datos reales son desordenados: nombres completos que hay que separar, dominios de correo que se deben extraer, códigos incluidos en identificadores y diferencias incoherentes entre mayúsculas y minúsculas. Los entrevistadores utilizan la manipulación de cadenas para comprobar si puede limpiar y transformar texto sin exportarlo a un script.
Al igual que ocurre con las fechas, estas funciones solo están estandarizadas de forma parcial, por lo que el objetivo es conocer el concepto y las variantes habituales.
- Extracción de subcadenas y búsqueda de posiciones
- Concatenación
- Separación y sustitución
- Conversión de mayúsculas y minúsculas y eliminación de espacios
SUBSTRING y búsqueda de posiciones
SUBSTRING(s FROM start FOR length) es la forma estándar de SQL; la mayoría de los motores también aceptan SUBSTRING(s, start, length). Las posiciones de las cadenas empiezan en 1, una fuente clásica de errores de desplazamiento para quienes programan en lenguajes que empiezan a contar desde 0.
POSITION(sub IN s) (o STRPOS/CHARINDEX) encuentra dónde comienza una subcadena y devuelve 0 cuando no la encuentra.
SELECT
SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year, -- '2024'
POSITION('-' IN 'INV-2024-042') AS first_dash; -- 4Extraer el dominio de un correo electrónico
Este es un ejemplo práctico fundamental. Busque la @ y, después, tome todo lo que aparezca a continuación. Combinar POSITION con SUBSTRING es el enfoque portable.
En PostgreSQL también puede utilizar SPLIT_PART(email, '@', 2), que resulta más claro y merece la pena mencionarlo como la respuesta idiomática.
-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;Concatenación entre dialectos
Unir cadenas depende del dialecto, y los entrevistadores esperan que conozca las distintas variantes.
- Estándar de SQL / Postgres / Oracle: el operador
||. - MySQL:
CONCAT(a, b, c)(el operador||representa OR lógico de forma predeterminada). - SQL Server:
+para cadenas oCONCAT().
CONCAT() trata NULL como una cadena vacía, mientras que || y + normalmente hacen que todo el resultado sea NULL si alguno de los operandos es NULL, una fuente sutil de errores.
-- Postgres
SELECT first_name || ' ' || last_name AS full_name FROM people;
-- MySQL / SQL Server
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM people;La trampa de la concatenación con NULL
Siguiendo con la escena anterior: si last_name es NULL, entonces first_name || ' ' || last_name devuelve NULL en Postgres y elimina el nombre completo.
La solución preventiva consiste en aplicar COALESCE a las partes que pueden ser NULL o utilizar CONCAT_WS (concatenación con separador), que omite los valores NULL e inserta el separador solo entre los valores presentes.
-- Safe in Postgres / MySQL
SELECT CONCAT_WS(' ', first_name, last_name) AS full_name FROM people;
-- Or guard each part
SELECT first_name || ' ' || COALESCE(last_name, '') FROM people;Separar cadenas
«Extraiga el tercer segmento de un código separado por guiones» es una prueba de separación de cadenas. SPLIT_PART(s, delim, n) de PostgreSQL devuelve directamente la pieza n y es la herramienta más clara.
MySQL no tiene una función de separación directa; el método idiomático consiste en anidar SUBSTRING_INDEX: tome las primeras n partes y, después, la última de ellas.
-- Postgres
SELECT SPLIT_PART('a-b-c-d', '-', 3); -- 'c'
-- MySQL: third part of a-b-c-d
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a-b-c-d', '-', 3), '-', -1); -- 'c'Reemplazar, recortar y rellenar
Estas son las operaciones de limpieza que los entrevistadores esperan que conozca de inmediato:
REPLACE(s, from, to)sustituye todas las apariciones.TRIM(s)elimina los espacios iniciales y finales;TRIM(BOTH 'x' FROM s)elimina un carácter específico.LPAD(s, len, ch)/RPADrellenan hasta alcanzar un ancho fijo, lo que resulta práctico para completar identificadores con ceros.
SELECT
REPLACE('555.123.4567', '.', '-') AS phone, -- 555-123-4567
TRIM(' hello ') AS clean, -- 'hello'
LPAD('42', 6, '0') AS padded; -- '000042'Conversión entre mayúsculas y minúsculas y longitud
Normalizar el uso de mayúsculas y minúsculas es esencial antes de comparar o agrupar texto. UPPER y LOWER son universales; INITCAP (Postgres/Oracle) aplica mayúscula inicial a las palabras.
LENGTH(s) devuelve el número de caracteres en la mayoría de los motores, pero tenga cuidado: SQL Server utiliza LEN() y, en algunas configuraciones, LENGTH cuenta bytes para el texto multibyte. Mencione esta particularidad cuando trabaje con datos que no sean ASCII.
SELECT
LOWER(email) AS email_norm,
INITCAP(city) AS city_pretty, -- Postgres
LENGTH(description) AS chars
FROM places;Coincidencia de patrones más allá de LIKE
Cuando LIKE no es suficientemente potente, a los entrevistadores les gusta comprobar que conoce las expresiones regulares. PostgreSQL ofrece el operador ~ y REGEXP_REPLACE / REGEXP_MATCHES; MySQL dispone de REGEXP / REGEXP_SUBSTR.
Ejemplo: conserve solo los dígitos de una cadena telefónica. Las expresiones regulares permiten hacerlo en una sola línea, en lugar de encadenar varias llamadas a REPLACE.
-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
AS digits; -- '5551234567'Ejemplo avanzado: normalizar y eliminar duplicados de nombres
Esta es una tarea de limpieza combinada. Suponga que los nombres llegan con espacios sobrantes y una combinación irregular de mayúsculas y minúsculas, lo que provoca duplicados erróneos. Normalice primero y agrupe después.
Quite los espacios exteriores, reduzca los espacios internos consecutivos mediante una expresión regular y convierta a minúsculas antes de contar los valores distintos. Este es exactamente el tipo de razonamiento en varios pasos que los entrevistadores valoran.
SELECT
LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;Convertir cadenas en números y fechas
Las columnas de cadenas suelen contener valores que deberían ser números o fechas. CAST(s AS INTEGER) o la abreviatura de Postgres s::int realiza la conversión, pero falla si la entrada no es válida.
Para las fechas, TO_DATE(s, 'YYYY-MM-DD') (Postgres/Oracle) analiza la cadena con una máscara de formato explícita. Es el enfoque más seguro porque elimina la ambigüedad sobre el orden del día y el mes.
SELECT
CAST(qty_text AS INTEGER) AS qty,
TO_DATE(order_str, 'DD/MM/YYYY') AS order_date
FROM staging;Comprobación rápida
Razone sobre el comportamiento de NULL en la concatenación de cadenas.
Repaso: analizar y dar formato a cadenas
Estos son los puntos clave que debe llevar a la entrevista:
- Las posiciones de las cadenas empiezan en 1;
SUBSTRING+POSITIONpermiten extraer por ubicación. - Concatene con
||(Postgres),CONCAT(MySQL) o+(SQL Server), y recuerde la propagación de NULL; prefieraCONCAT_WS. - Separe con
SPLIT_PART(Postgres) o conSUBSTRING_INDEXanidado (MySQL). REPLACE,TRIM,LPAD,UPPER/LOWERsirven para limpiar y normalizar; las expresiones regulares resuelven los casos difíciles.- Normalice las mayúsculas y minúsculas y los espacios antes de agrupar para evitar duplicados erróneos.
Preguntas frecuentes
¿La lección «Analizar y dar formato a cadenas» es gratis?
Sí — el texto completo de «Analizar y dar formato a cadenas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.
¿Qué aprenderé en «Analizar y dar formato a cadenas»?
SUBSTRING, posición, división y conversión de mayúsculas y minúsculas entre distintos dialectos. Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Interview Prep?
No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Analizar y dar formato a cadenas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?
Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Aritmética de fechas e intervalos
- Truncar y agrupar fechas por intervalos
- Analizar y dar formato a cadenas
- Zonas horarias y marcas de tiempo