Перейти к основному содержимому

regexp_extract

Описание

Эта функция возвращает первую совпадающую подстроку в целевом значении, которая соответствует шаблону регулярного выражения. Она извлекает элемент в позиции pos, который соответствует шаблону. Шаблон должен полностью соответствовать некоторым частям str, чтобы функция могла вернуть части, которые нужно сопоставить в шаблоне. Если совпадения не найдены, функция вернет пустую строку.

Синтаксис

VARCHAR regexp_extract(VARCHAR str, VARCHAR pattern, int pos)

Примеры

подсказка

Этот пример использует набор данных Local Climatological Data (LCD), представленный в руководстве Основы Selena для быстрого старта. Вы можете загрузить данные и попробовать пример самостоятельно.

Дан следующий набор данных:

SELECT HourlySkyConditions FROM quickstart.weatherdata
WHERE HourlySkyConditions LIKE '%OVC%'
LIMIT 10;
+---------------------+
| HourlySkyConditions |
+---------------------+
| OVC:08 110 |
| OVC:08 120 |
| OVC:08 120 |
| OVC:08 30 |
| OVC:08 29 |
| OVC:08 27 |
| OVC:08 26 |
| OVC:08 22 |
| OVC:08 23 |
| OVC:08 22 |
+---------------------+
10 rows in set (0.03 sec)

Возврат двух наборов цифр, следующих за строкой OVC:

SELECT regexp_extract(HourlySkyConditions, 'OVC:(\\d+ \\d+)', 1) FROM quickstart.weatherdata
WHERE HourlySkyConditions LIKE '%OVC%'
LIMIT 10;
+-----------------------------------------------------------+
| regexp_extract(HourlySkyConditions, 'OVC:(\\d+ \\d+)', 1) |
+-----------------------------------------------------------+
| 08 110 |
| 08 120 |
| 08 120 |
| 08 30 |
| 08 29 |
| 08 27 |
| 08 26 |
| 08 22 |
| 08 23 |
| 08 22 |
+-----------------------------------------------------------+
10 rows in set (0.01 sec)

Возврат только второго набора цифр, следующего за строкой OVC:

SELECT regexp_extract(HourlySkyConditions, 'OVC:(\\d+) (\\d+)', 2) FROM quickstart.weatherdata WHERE HourlySkyConditions LIKE '%OVC%' LIMIT 10;
+-------------------------------------------------------------+
| regexp_extract(HourlySkyConditions, 'OVC:(\\d+) (\\d+)', 2) |
+-------------------------------------------------------------+
| 110 |
| 120 |
| 120 |
| 30 |
| 29 |
| 27 |
| 26 |
| 22 |
| 23 |
| 22 |
+-------------------------------------------------------------+
10 rows in set (0.01 sec)
подсказка

Тот же результат можно получить, не заключая первый набор цифр в группу сопоставления () и возвращая первую группу:

regexp_extract(HourlySkyConditions, 'OVC:\\d+ (\\d+)', 1)

keyword

REGEXP_EXTRACT,REGEXP,EXTRACT