Проверка наличия значений в строке - PullRequest
0 голосов
/ 14 октября 2019

У меня есть такая строка: 'Oracle Database Token: xxxx.';

Мне нужно вернуть true или false, если xxxx - один из трех вариантов:

  • 1 или 11или 111 или 1111 или 11111 или 111111 и т. д.
  • символ '-'
  • число 123456789

Я пытался построить регулярное выражение для функции regexp_substr()но это оказалось очень сложно.

Возможно ли это в регулярном выражении?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Вы можете использовать TRANSLATE для проверки первого условия, а два других - это простые тесты на равенство:

SELECT *
FROM   your_table
WHERE  token = 'Oracle Database Token: -.'
OR     token = 'Oracle Database Token: 123456789.'
OR     (   token <> 'Oracle Database Token: .'
       AND TRANSLATE( token, '_1', '_' ) = 'Oracle Database Token: .' )

Образцы данных :

CREATE TABLE your_table ( token ) AS
  SELECT 'Oracle Database Token: -.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 123456789.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 1.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 111.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 111111.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: 12111.' FROM DUAL UNION ALL
  SELECT 'Oracle Database Token: -12.' FROM DUAL;

Вывод запроса :

| TOKEN                             |
| :-------------------------------- |
| Oracle Database Token: -.         |
| Oracle Database Token: 123456789. |
| Oracle Database Token: 1.         |
| Oracle Database Token: 111.       |
| Oracle Database Token: 111111.    |

дБ <> скрипка здесь


Вы также можете написать это как регулярное выражение:

SELECT *
FROM   your_table
WHERE  REGEXP_LIKE( token, '^Oracle Database Token: (1+|123456789|-)\.$' )

Но простые строковые функции / сравнения могут быть быстрее.

0 голосов
/ 14 октября 2019

Я думаю, вы хотите:

where regexp_like(suchstring, '^Oracle Database Token: ([0-9]+|-)[.]'

РЕДАКТИРОВАТЬ:

Если вы хотите эти конкретные цифры:

where regexp_like(suchstring, '^Oracle Database Token: (1+|-|123456789)[.]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...