У меня есть ссылка, как показано ниже
https://www.example.com/xy-pz-p123456789.html
Из этой ссылки я хотел бы извлечь число «123456789», используя запрос mysql.
У меня есть следующий запрос, чтобы извлечь все после последнего -p
SELECT id, RIGHT(`internal_id`,LOCATE('p',reverse(`internal_id`)) - 1) from pricing_dm where `id` = 1
Запрос возвращает: 123456789.html
У меня есть следующий запрос, чтобы получить все, что осталось от ".html"
SELECT id, left(`internal_id`,LOCATE('.html',`internal_id`) - 1) from pricing_dm where `id` = 1
Запрос возвращает https://www.example.com/xy-pz-p123456789
Есть ли способ, как я могу объединить эти два в одном запросе, чтобы извлечь только число.
Большое спасибо.






Вы можете сделать это с помощью запроса следующим образом:
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX('https://www.example.com/xy-pz-p123456789.html', '-p', -1), '.' ,1);
Образец
MariaDB [(none)]> SELECT SUBSTRING_INDEX(
-> SUBSTRING_INDEX('https://www.example.com/xy-pz-p123456789.html', '-p', -1), '.' ,1);
+-------------------------------------------------------------------------------------------------------+
| SUBSTRING_INDEX(
SUBSTRING_INDEX('https://www.example.com/xy-pz-p123456789.html', '-p', -1), '.' ,1) |
+-------------------------------------------------------------------------------------------------------+
| 123456789 |
+-------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]>
Мое предложение состояло бы в том, чтобы использовать регулярное выражение
https://dev.mysql.com/doc/refman/8.0/en/regexp.html
Что-то вроде mysql> SELECT REGEXP_SUBSTR('internal_id', '(.*)\d*\(.html)'); (.)\д.html
Вы можете использовать трюк с кастингом MySql:
https://www.db-fiddle.com/f/oC7zRWks24b4QCS4B3RoA1/0
SELECT RIGHT(`internal_id`,LOCATE('p',reverse(`internal_id`)) - 1)+0
FROM pricing_dm