Использование регулярных выражений в SQL
Я столкнулся с проблемой, когда я не могу больше идти самостоятельно. В настоящее время у меня есть база данных, которая в основном перечисляет мой мобильный телефон с различными приложениями на нем.
Приложения перечислены со статусом в том же столбце базы данных, что означает, что я отделяю приложение от статуса с помощью ";" и я разделяю различные приложения с помощью ",".
Пример:
ipboard,4.83->6.3,Running;testAcap,6.9-0,Stopped;
ipboard,2.3333->5.366,Stopped;Videostream,1.2,Stopped;
Теперь, как мне найти все ipboards, которые в настоящее время как приложение остановлены? Как видите, строка перед статусом может меняться по длине из-за разных версий. И я не хочу список всего, что остановлено, только ipboard в этом случае.
Мой дерьмовый запрос пока что выбирает все строки с ipboard в них (у всех их нет):
select *
from acaps
where acaps like '%ipb%'
Для меня следующая логичная вещь будет что-то вроде:
select *
from acaps
where acaps like '%ipb%'
and subshitblabla where "Stopped" after the "," after the ipboard string.
Кто-нибудь знает, как заставить это работать?
2 ответа
Спасибо всем за проявленный интерес. Нашел решение, которое работает для меня, разместив здесь в качестве ссылки для других.
SELECT * FROM `acaps`
where acaps REGEXP '(ipboard)[,][0-9\-\>\.]*[,](Stopped)\;.*'
Предполагая, что thar col_name - это та сумма, которую вы не хотите использовать для фильтра. Если я правильно помню, вы можете сделать это так же, как
select *
from acaps
where acaps.col_name like 'ipb%Stopped'