У меня есть поле описания. Поле json
Содержимое поля описания выглядит следующим образом:
{
"address":
{
"street": "street 123",
"information":
{
"province": "province 123",
"regency": "regency 123",
"district": "district 123"
}
},
"mobileNumber": "123"
}
Я хочу искать провинцию в данных json
Я пробую вот так:
SELECT * FROM orders WHERE LOWER(JSON_EXTRACT(description, "$.address.information.province")) LIKE "%prov%"
Результат пуст
Как я могу решить эту проблему?
Проблема в том, что ваш JSON недействителен. Не должно быть запятых после
"district": "district 123",
а также
"mobileNumber": "123",
Если вы попытаетесь использовать действительный JSON, вы получите ожидаемый результат:
select json_extract('{ "address": { "street": "street 123", "information": { "province": "province 123", "regency": "regency 123", "district": "district 123" } }, "mobileNumber": "123"}', '$.address.information.province')
"province 123"
Я создал db-скрипт, который, кажется, отлично работает с вашими данными:
create table x (id int, description json);
insert into x values(1, '{ "address": { "street": "street 123", "information": { "province": "province 123", "regency": "regency 123", "district": "district 123" } }, "mobileNumber": "123"}');
select * from x where json_extract(description, '$.address.information.province') like '%prov%'
Выход
id description
1 {"address": {"street": "street 123", "information": {"regency": "regency 123", "district": "district 123", "province": "province 123"}}, "mobileNumber": "123"}
три вещи:
1.when использовать функцию mysql 'JSON_EXTRACT', сделать suer, тип данных - 'json';
2. Есть что-то не так с ur json data.deleted 2 запятыми. Правильный json должен быть таким:
{"address": {
"street": "street 123",
"information": {
"province": "province 123",
"regency": "regency 123",
"district": "district 123"
}
},
"mobileNumber": "123"}
3.it чувствителен к регистру. попробуйте использовать это:
SELECT * FROM orders WHERE JSON_EXTRACT(description, "$.address.information.province") LIKE "%prov%"