Как определить комбинацию числа и символа в SQL - PullRequest
1 голос
/ 29 апреля 2019

У меня есть требование, где я должен найти количество записей в специальном шаблоне в поле ref_id в таблице. Это колонка varchar. Мне нужно найти все записи, где 8-й, 9-й и 10-й символ числовой + XX. То есть это должно быть как 2XX или 8XX. Я попытался использовать регулярное выражение: digit: но не повезло. По сути, я ищу все записи, где 8-10-й символы 1XX, 2XX, 3XX ... и т. Д.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2019

Этого также можно добиться с помощью стандартных функций SQL без регулярных выражений

select * from t where s like '________XX%'     -- any 8 characters and then XX
      AND translate( substr(s,8,1),'?0123456789','?') is  null; --8th one is numeric

DEMO

2 голосов
/ 29 апреля 2019

Используя REGEXP_LIKE, замените table на Ваш:

SELECT COUNT(*)
FROM table
WHERE REGEXP_LIKE(ref_id,'^.{7}[0-9]XX');

.{7} все семь символов

[0-9] 8-ая цифра

XX 9-й и 10-й символы X

Или с [:digit:] классом, как Вы упоминаете, Вы можете использовать:

SELECT COUNT(*)
FROM table
WHERE REGEXP_LIKE(ref_id,'^.{7}[[:digit:]]XX');
0 голосов
/ 02 мая 2019

Нет необходимости в регулярном выражении:

select * from mytable where substr(ref_id, 8, 3) in ('0XX','1XX','2XX','3XX','4XX','5XX','6XX','7XX','8XX','9XX')

или

select * from mytable where substr(ref_id, 8, 3) in ('1XX','2XX','3XX','4XX','5XX','6XX','7XX','8XX','9XX')

Я не знаю, является ли '0XX' действительным соответствием или нет.

Регулярные выражения имеют тенденцию быть медленными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...