En MySQL versión 8.0.19, cómo dividir cadenas en columnas, ya que algunas funciones más antiguas no están disponibles como carácter index (), string_split () [duplicado]

Dec 29 2020

Tengo una fila que me gustaría dividir en columnas, por ejemplo, el nombre de la columna es Código con la fila que muestra 01,04,07 para los artículos del producto.

Quiero dividir los artículos del producto en columnas. Cualquier sugerencia sería útil ya que probé las funciones anteriores, pero me di cuenta de que la versión de SQL en la que estoy trabajando no tiene esas opciones como string_split e índice de caracteres. Usé instr()y, substring()pero un comprador puede comprar más o menos artículos de los que se muestran arriba.

Respuestas

1 GMB Dec 29 2020 at 05:15

Tu problema inmediato es tu diseño. No debe almacenar varios valores enteros en una columna de cadena. Cada tupla de valores debe almacenarse en una fila separada.

En cuanto a su pregunta: en la versión reciente de MySQL, una opción es JSON. Puede ser más práctico poner los valores en filas en lugar de en columnas. He aquí una forma de hacerlo:

select t.*, x.*
from mytable t
cross join lateral json_table(
    concat('[', t.code, ']'),
    '$[*]' columns (rn for ordinality, code_part int path '$')
) x

Si desea los resultados como columnas, una opción es la agregación condicional; necesita enumerar tantas columnas como sea necesario:

select t.*,
    max(case when x.rn = 1 then x.code_part end) as code_part_1,
    max(case when x.rn = 2 then x.code_part end) as code_part_2,
    ...
from mytable t
cross join lateral json_table(
    concat('[', t.code, ']'),
    '$[*]' columns (rn for ordinality, code_part int path '$')
) x
group by t.id  -- assuming that "id" is the primary key of "mytable"