0Pricing
Coding Interview Prep · Lección

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 Coding 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 Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding 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; -- 4

Extraer 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 o CONCAT().

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) / RPAD rellenan 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 + POSITION permiten extraer por ubicación.
  • Concatene con || (Postgres), CONCAT (MySQL) o + (SQL Server), y recuerde la propagación de NULL; prefiera CONCAT_WS.
  • Separe con SPLIT_PART (Postgres) o con SUBSTRING_INDEX anidado (MySQL).
  • REPLACE, TRIM, LPAD, UPPER/LOWER sirven 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 Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding 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 Coding 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 Coding Interview Prep?

No se requiere experiencia previa. Coding 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 Coding Interview Prep?

Sí. Cada lección de Coding 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

  1. Aritmética de fechas e intervalos
  2. Truncar y agrupar fechas por intervalos
  3. Analizar y dar formato a cadenas
  4. Zonas horarias y marcas de tiempo
← Volver a Coding Interview Prep