Как выбрать записи из таблицы, регулярные выражения которых выполняются
имеется таблица
| id | reg | mess |
|---|---|---|
| 1 | [V\d]{4} |
тут сообщение 1 |
| 2 | ([a-z]{2})([0-9]{7}) |
тут сообщение 2 |
| 3 | [A-Z\d]{4} |
тут сообщение 3 |
как имея входные данные V123 получить все значения столбца mess где выполняется регулярное выражение из reg
Ответы (1 шт):
Автор решения: ValNik
→ Ссылка
Попробуйте так
select *
from data
where regexp_like('V123',reg)
Пример упражнения
create table data (id int,reg varchar(100), mess varchar(100));
insert into data values
(1,'[V\d]{4}','тут сообщение 1')
,(2,'([a-z]{2})([0-9]{7})','тут сообщение 2')
,(3,'[A-Z\d]{4}','тут сообщение 3')
,(4,'[A-Z\d]{3}','тут сообщение 4')
,(5,'([a-z]{1})([0-9]{3})','тут сообщение 5')
,(6,'[V\d]{3}','тут сообщение 6')
;
create table test (idd int,testdata varchar(100));
insert into test values
(100,'V123')
,(101,'X1234')
,(102,'V12')
,(103,'AB1234567')
,(104,'EF7')
;
select *
,regexp_like(testdata,reg) ok
from data,test
where regexp_like(testdata,reg)
order by id,idd
Результат
| id | reg | mess | idd | testdata | ok |
|---|---|---|---|---|---|
| 2 | ([a-z]{2})([0-9]{7}) | тут сообщение 2 | 103 | AB1234567 | 1 |
| 5 | ([a-z]{1})([0-9]{3}) | тут сообщение 5 | 100 | V123 | 1 |
| 5 | ([a-z]{1})([0-9]{3}) | тут сообщение 5 | 101 | X1234 | 1 |
| 5 | ([a-z]{1})([0-9]{3}) | тут сообщение 5 | 103 | AB1234567 | 1 |