Взятие числа между двумя конкретными символами

У меня есть ссылка, как показано ниже

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

Есть ли способ, как я могу объединить эти два в одном запросе, чтобы извлечь только число.

Большое спасибо.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
22
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете сделать это с помощью запроса следующим образом:

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

Другие вопросы по теме