Функция match
проверяет соответствие экземпляров процесса выражению на основе регулярных выражений. Функция работает по значениям любой колонки.
По умолчанию значения NULL
игнорируются при работе функции. Если необходимо подсчитать точные переходы, например, количество экз. процесса, где есть переход из "А"
в NULL
, то необходимо воспользоваться флагом ALLOW_NULL
.
match(таблица.колонка,'выражение' [,'ALLOW_NULL'])
Паттерны выражений:
Синтаксис |
Описание |
Пример |
"" |
В двойных кавычках записывается значение атрибута |
"А" |
> или -> |
Указание на следование |
"А" > "В" или "А" -> "В" |
(|) |
Группа событий объединенная по OR |
("А" | "В") |
! |
Отрицание |
!"А" |
* |
0 или более вхождений |
"А"* |
+ |
1 или более вхождений |
"А"+ |
.* |
Любой шаг |
"А" > .* |
Запрос:
select extId
from process
where match(event.name,'"register request" -> .*')
Данные на входе:
Данные на выходе:
extId |
name |
1 |
register request |
1 |
check ticket |
1 |
decide |
2 |
check ticket |
2 |
decide |
2 |
reinitiate request |
3 |
register request |
3 |
pay compensation |
Запрос:
select extId
from process
where match(event.name,'"register request" -> .* -> "decide"')
Данные на входе:
Данные на выходе:
extId |
name |
1 |
register request |
1 |
check ticket |
1 |
decide |
2 |
check ticket |
2 |
decide |
2 |
reinitiate request |
3 |
register request |
3 |
pay compensation |
Запрос:
select extId
from process
where match(event.name,'"register request" -> .* -> ("decide" | "pay compensation")')
Данные на входе:
Данные на выходе:
extId |
name |
1 |
register request |
1 |
check ticket |
1 |
decide |
2 |
check ticket |
2 |
decide |
2 |
reinitiate request |
3 |
register request |
3 |
pay compensation |
Запрос:
select extId
from process
where not match(event.name,' .* -> "pay compensation"')
или также может подойти другое условие:
select extId
from process
where match(event.name,' .* -> !"pay compensation"')
Данные на входе:
Данные на выходе:
extId |
name |
1 |
register request |
1 |
check ticket |
1 |
decide |
2 |
check ticket |
2 |
decide |
2 |
reinitiate request |
3 |
register request |
3 |
pay compensation |
Запрос:
select extId
from process
where match(event.supp_level,'.* -> "1ЛТП" -> "2ЛТП" -> .*')
Данные на входе:
Данные на выходе:
extId |
supp_level |
1 |
1ЛТП |
1 |
NULL |
1 |
2ЛТП |
2 |
2ЛТП |
2 |
2ЛТП |
2 |
1ЛТП |
3 |
1ЛТП |
3 |
2ЛТП |
Запрос:
select extId
from process
where match(event.supp_level,'.* -> "1ЛТП" -> "2ЛТП" -> .*', 'ALLOW_NULL')
Данные на входе:
Данные на выходе:
extId |
supp_level |
1 |
1ЛТП |
1 |
NULL |
1 |
2ЛТП |
2 |
2ЛТП |
2 |
2ЛТП |
2 |
1ЛТП |
3 |
1ЛТП |
3 |
2ЛТП |
Запрос:
select extId
from process
where match(event.supp_level,'.* -> "1ЛТП" -> NULL -> .*', 'ALLOW_NULL')
Данные на входе:
Данные на выходе:
extId |
supp_level |
1 |
1ЛТП |
1 |
NULL |
1 |
2ЛТП |
2 |
2ЛТП |
2 |
2ЛТП |
2 |
1ЛТП |
3 |
1ЛТП |
3 |
2ЛТП |