Как можно извлечь группу с помощью регулярного выражения, используя функцию REGEXP_SUBSTR?

Как можно получить значение 19656 из строки '{"10":19656,"11":19658,"12":0,"13":0}', используя функцию REGEXP_SUBSTR в MySQL? Мой запрос возвращает NULL, и я не могу понять, в чем проблема.
  • 10 января 2025 г. 13:43
Ответы на вопрос 2
Чтобы извлечь значение `19656` из строки `{"10":19656,"11":19658,"12":0,"13":0}` с использованием функции `REGEXP_SUBSTR` в MySQL, вам нужно составить правильное регулярное выражение.

Вот пример запроса, который должен сработать:

```sql
SELECT REGEXP_SUBSTR('{"10":19656,"11":19658,"12":0,"13":0}', '"10":([0-9]+)', 1, 1, NULL, 1) AS extracted_value;
```

Давайте разберем это выражение:

1. `'"10":([0-9]+)'` - это регулярное выражение, которое ищет текст `"10":`, за которым следуют одна или несколько цифр (`[0-9]+`). Число, следующее после `"10":`, будет захвачено в группу, обозначенную скобками.
2. `1` - это указывает, что поиск начнется с начала строки.
3. `1` - используется для нахождения первой группы.
4. `NULL` - указывает на то, что не нужен модификатор, этот параметр можно оставить NULL.
5. `1` - указывает на то, что мы хотим вернуть первую захваченную группу (то есть саму цифру).

Таким образом, SQL-запрос вернет значение `19656`. Если ваш запрос возвращает `NULL`, убедитесь, что:

- Строка действительно содержит текст в формате JSON.
- Регулярное выражение корректно.
Не уверен, но может лучше работать как с JSON , судя по строке. 
SELECT CAST(json_extract('{"10":19656,"11":19658,"12":0,"13":0}', '$."10"') AS UNSIGNED) AS value;
|value  |
|-------|
|19656|
Похожие вопросы