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
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:
Esto nos daría el siguiente resultado:
Explicación del código:
SUBSTRING_INDEX(serial,':',2)
extrae el segundo subcadena de la columnaserial
, delimitada por ‘:’SUBSTRING_INDEX
con-1
como argumento obtiene la subcadena más a la derecha después del segundo ‘:’, que es la que queremosREPLACE
luego reemplaza cualquier carácter ‘:’ restante en la subcadena extraída con una cadena vacíaserial_number
calculada y la columnaname
de la tabla, filtradas por la cláusulaWHERE
como antes.