es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Resultado SQL de una lista delimitada.

La columna “serial” contiene múltiples valores separados por dos puntos “:”. Es una lista de delimitadores (separados por:).
Estoy usando una cláusula “where” y el operador “like” para recuperar mi número de serie requerido y quiero mostrar solo ese número de serie en la columna de resultados.

Mi tabla de ejemplo :


serial |nombre | descripción 123:234:456 |Raj | Temporal 111:222:333 |Kumar | Permanente

Mi código de ejemplo :

select serial, nombre from tabla
where serial like '%234%'

Mi resultado actual :

serial      | nombre

123:234:456 | Raj

Resultado esperado :

serial  | nombre

234     | Raj
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado esperado, podemos utilizar las funciones de cadena SQL para extraer el número de serie requerido de la lista delimitadora. Una forma es utilizar la función SUBSTRING_INDEX para obtener el segundo valor (es decir, el que está después del primer dos puntos) y reemplazar cualquier valor posterior con una cadena vacía. Así es como se vería el código:

    SELECT 
      REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(serial, ':', 2), ':', -1), ':', '') AS serial_number,
      name 
    FROM table
    WHERE serial LIKE '%234%';
    

    Esto nos daría el siguiente resultado:

    serial_number | name
    --------------------
    234           | Raj
    

    Explicación del código:

    • La función SUBSTRING_INDEX(serial,':',2) extrae el segundo subcadena de la columna serial, delimitada por ‘:’
    • La segunda función SUBSTRING_INDEX con -1 como argumento obtiene la subcadena más a la derecha después del segundo ‘:’, que es la que queremos
    • La función REPLACE luego reemplaza cualquier carácter ‘:’ restante en la subcadena extraída con una cadena vacía
    • Finalmente, seleccionamos la columna serial_number calculada y la columna name de la tabla, filtradas por la cláusula WHERE como antes.

Comments are closed.