SQL: diferença entre JSON_EXTRACT() e ->?
Existe diferença entre a função JSON_EXTRACT() e o operator -> em SQL? Os dois parecem fazer exatamente a mesma coisa, que é interpretar um JSON e retornar o valor contido na chave pedida. Encontro informações sobre os dois, mas não comparando os dois.
SELECT *
FROM my_table
WHERE data -> '$.birthdate' != '01/01/0001';
SELECT *
FROM my_table
WHERE JSON_EXTRACT(data, '$.birthdate') != '01/01/0001';
De qual banco estamos falando?
Acredito ser MySQL, pois outros bancos não possuem esta função. Por exemplo, em Oracle as funções para manipular JSON são diferentes, o mesmo para PostgreSQL.
Enfim, segundo a documentação do MySQL, o operador ->
é um alias para JSON_EXTRACT()
, quando chamada com 2 argumentos.
Sim, porque você pode chamar JSON_EXTRACT()
com mais que 2 argumentos. Na própria documentação tem este exemplo:
SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]');
Que no caso retorna [20, 10]
, pois os argumentos '$[1]'
e '$[0]'
são agrupados no resultado final. Com ->
não é possível, pois ele só aceita um operando à direita.
Outra diferença é que o operador ->
só aceita identificadores de coluna como primeiro operando, enquanto JSON_EXTRACT
aceita qualquer expressão que resulte em um JSON válido.