MySQL REGEXP + пробелы (s)
база данных, с которой я работаю, хранит записи JSON в типах данных LONGTEXT. Я хочу иметь возможность выбирать записи в зависимости от данных JSON. Вот некоторые примеры данных:
{
"12f9cb0a-2218-4590-a05d-c1ffab00f693": {
"0": {
"value": "test"
}
},
"4d1dfd2e-7bc1-4303-9c8c-90856e918bb9": {
"item": {
"0": "11"
}
}
}
поэтому я хочу выбрать данные, которые содержит "4d1dfd2e-7bc1-4303-9c8c-90856e918bb9": {"пункт": { "0":"11" } } отфильтровав пробелы (вкладки, пробелы, новые строки) с помощью функции REGEXP, я попробовал это безрезультатно:
SELECT * FROM my_table WHERE (elements REGEXP BINARY '"4d1dfd2e-7bc1-4303-9c8c-90856e918bb9":s*{s*"item":s*{s*"0":s*"11"s*}s*}');
тест regex работает с использованием Rubular и Regexpal.com но MySQL не нравится s* выражение. У кого-нибудь есть лучшее решение для этого?
3 ответов
кажется, что MySQL не поддерживает \s
обозначения в регулярных выражениях, только [[:space:]]
обозначение (whereby [:space:]
, внутри класса символов, означает "любой символ пробела").
кстати, когда вы do нужна обратная косая черта - например, когда вам нужна буквальная звездочка \*
- вам действительно нужно удвоить обратную косую черту (например,\*
), как указано в §12.5.2 "регулярные выражения" из MySQL 5.6 Ссылка Руководство:
Примечание
Потому что MySQL использует синтаксис escape C в строках (например,"\n
"чтобы представить символ новой строки), вы должны удвоить любой"\
" что вы используете в своейREGEXP
строки.
использовать строку replace;
select replace(json, ' ','') from table;
Если в ваших данных есть пробелы, это не сработает.
лучше использовать тип json:
SELECT CAST(`column` AS JSON)
WHERE JSON_EXTRACT(CAST(`column` as JSON),'$."4d1dfd2e-7bc1-4303-9c8c-90856e918bb9".item."0"')="11"