sql >> Base de Datos >  >> RDS >> Mysql

MySQL seleccionando palabras entre comillas dentro de una columna de texto desordenado

Deberías encontrar una mejor manera de representar lo que quieres, pero creo que lo siguiente se acerca:

select concat_wc(',', substring_index(substring_index(entry_value, '"', 2), '"' -1),
                 substring_index(substring_index(entry_value, '"', 4), '"' -1),
                 . . .
                )

Es posible que deba poner una condición de parada basada en la cantidad de valores en la cadena, lo que resulta en algo como:

select concat_ws(',',
                 case when num_entry_values >= 1 then substring_index(substring_index(entry_value, '"', 2), '"' -1) end,
                 case when num_entry_values >= 2 then substring_index(substring_index(entry_value, '"', 4), '"' -1) end,
              . . .
             )

Si no tiene este número, puede calcularlo contando el número de comillas dobles en la cadena.

EDITAR:

Para contar el número de entradas, cuente el " :

from (select aev.*,
             (length(entry_value) = length(replace(entry_value, '"', '')) ) / 2 as num_entry_values
      from ch_arf_entry_values aev
     ) aev