json_object json_extract functions from data array mysql mysql-json

json_extract - select json mysql 8



¿Cómo buscar la matriz JSON en MySQL? (5)

Digamos que tengo una columna JSON llamada data en alguna tabla MySQL, y esta columna es una matriz única. Así, por ejemplo, los datos pueden contener:

[1,2,3,4,5]

Ahora quiero seleccionar todas las filas que tienen una columna de datos donde uno de sus elementos de matriz es mayor que 2. ¿Es esto posible?

Intenté lo siguiente, pero parece que siempre es cierto, independientemente de los valores de la matriz:

SELECT * from my_table WHERE JSON_EXTRACT(data, ''$[*]'') > 2;


No sé si encontramos la solución. Encontré con MariaDB una forma de buscar la ruta en una matriz. Por ejemplo, en la matriz [{"id": 1}, {"id": 2}], quiero encontrar la ruta con id igual a 2.

SELECT JSON_SEARCH(''name_field'', ''one'', 2, null, ''$[*].id'') FROM name_table

El resultado es:

"$[1].id"

El asterisco indica buscar en todo el conjunto.


Puedes usar el extracto de JSON para buscar y seleccionar datos

SELECT data, data->"$.id" as selectdata FROM table WHERE JSON_EXTRACT(data, "$.id") = ''123'' #ORDER BY c->"$.name"; limit 10 ;



Desde MySQL 8 hay una nueva función llamada JSON_TABLE .

CREATE TABLE my_table (id INT, data JSON); INSERT INTO my_table VALUES (1, "[1,2,3,4,5]"), (2, "[0,1,2]"), (3, "[3,4,-10]"), (4, "[-1,-2,0]"); SELECT DISTINCT my_table.* FROM my_table, JSON_TABLE(data, "$[*]" COLUMNS(nr INT PATH ''$'')) as ids WHERE ids.nr > 2; +------+-----------------+ | id | data | +------+-----------------+ | 1 | [1, 2, 3, 4, 5] | | 3 | [3, 4, -10] | +------+-----------------+ 2 rows in set (0.00 sec)


SELECT JSON_SEARCH(''["1","2","3","4","5"]'', ''one'', "2") is not null

es verdad

SELECT JSON_SEARCH(''["1","2","3","4","5"]'', ''one'', "6") is not null

Es falso