Problema:SQL: SELECT La alimentación de salida que LIKE
select STR1 from T1 where STR2 = 'NAME1'
En el STR1 consulta anterior puede estar en forma {ABC, ABC_1, ABC_2, ..., MNO, XYZ, XYZ_1 ...}.
Así que supongo que he siguiente salida
ABC_1
MNO
XYZ
Ahora quiero extraer todos los STR1 juego que incluye la parte antes de _ #. Por ejemplo, la producción esperada para el conjunto de datos de ejemplo anterior es:
ABC
ABC_1
ABC_2
MNO
XYZ
XYZ_1
Tenga en cuenta que STR2 siempre es única por STR1.
Código sabia me imagino algo como lo siguiente:
SELECT
STR1
FROM
T1
WHERE
STR1
LIKE '% (truncate_underscore_part(select STR1 from T1 where STR2 = 'NAME1')) %'
Alguna idea?
Primera solución:
select t1.str1
from (
select case when instr(str1, '_') > 0
then substr(str1, 1, instr(str1, '_') - 1)
else str1
end prefix
from t1 where str2 = 'NAME1'
) prefix_list,
t1
where t1.str1 like prefix || '%'
¿Está utilizando Oracle o MySQL? –
Su ejemplo del resultado de la primera consulta muestra solo elementos sin guiones bajos, pero entiendo por su descripción que la primera lista también podría incluir 'ABC_1', etc., y desea quitar la _ _ porción de la cadena antes de continuar con la coincidencia? –
¿Por qué está etiquetado como Oracle y MySQL? – MatBailie