Возврат определенной группы захвата / подстроки в MySQL 5, используя REGEXP - PullRequest
1 голос
/ 10 июля 2019

У меня проблемы с написанием регулярного выражения, чтобы сделать то, что мне нужно в синтаксисе MySQL.

У меня есть следующее значение для столбца http_referer в таблице базы данных:

https://www.example.com?id=123&true

И мне нужно вернуть значение параметра строки запроса uid (в данном случае 123), чтобы подключиться к другому запросу.

`SELECT * FROM sites WHERE id = (http_referer REGEXP 'uid=([0-9]+)&?')

Это мой запрос, который не работает, возможно потому, что я пытаюсь передать регулярное выражение в стиле PHP вместо одного MySQL, который можно использовать (однако я понимаю, что MySQL даже не поддерживает группы захвата, так что я как бы в тупике).

1 Ответ

1 голос
/ 10 июля 2019

Если вы используете MySQL до версии 8, которая не поддерживает REGEXP_REPLACE(), вы можете использовать SUBSTRING_INDEX () для извлечения частей строки:

mysql> set @a = 'some.domain?id=123&true';
mysql> select substring_index( substring_index(@a, '?id=', -1), '&', 1) as result;
+--------+
| result |
+--------+
| 123    |
+--------+

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...