Вы можете использовать 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|-)\.$' )
Но простые строковые функции / сравнения могут быть быстрее.