Executando verificação de segurança...
1

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';
Carregando publicação patrocinada...
3

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.

1
1