Oracle: исключить результаты из запроса с помощью регулярного выражения - PullRequest
3 голосов
/ 29 июня 2010

Используя linq (.net 3.5 +) и построитель предикатов , я сделал это так:

var startsWith3Chars = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z]{3}\-", System.Text.RegularExpressions.RegexOptions.Compiled);
wherePredicate = wherePredicate.And(x => startsWith3Chars.Matches(x.MATERIALUID).Count > 0);

Но теперь мне нужно выполнить эту фильтрацию в тексте команды.

Есть ли способ использовать что-то вроде REGEXP_INSTR для ограничения результатов на основе регулярного выражения?

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Учитывая данные этого теста ...

SQL> select name
  2  from t23
  3  /

NAME
----------
SAM-I-AM
MR KNOX
X11
CAT
LORAX

SQL>

... следующий запрос использует REGEXP_LIKE () для возврата записей, первые четыре символа которых содержат только буквы или дефисы:

SQL> select name
  2  from t23
  3  where regexp_like(name, '^[[:alpha:]\-]{4}')
  4  /

NAME
----------
SAM-I-AM
LORAX

SQL>

Мы также можем использовать REGEXP_INSTR () с тем же базовым шаблоном (я опустил ведущую каретку):

SQL> select name
  2  from t23
  3  where regexp_instr(name, '[[:alpha:]\-]{4}', 1) = 1
  4  /

NAME
----------
SAM-I-AM
LORAX

SQL>

Oracle добавила полную поддержку регулярных выражений в свой SQL в версии 10g. Узнайте больше .

2 голосов
/ 29 июня 2010

Как насчет REGEXP_LIKE ?

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