Вы можете проверить каждый шаблон с помощью регулярного выражения. Но, пожалуйста, объясните, почему вы говорите «AU-I 123456», поскольку оно точно соответствует вашему заявленному требованию:2 буквы + тире + римские цифры + пробел + 6 цифр
- 'AU' -> 2 буквы
- '-' -> тире
- 'I' -> Римская цифра 1
- '' -> пробел
- '123456' -> 6 цифр
Ниже приведено регулярное выражение, используемое для каждого требования.
2 буквы + пробел + 6 цифр, пл .: AE 232323, тогда все в порядке. регулярное выражение: ^ [AZ] {2} \ d {6} $
2 буквы + тире + римское число + пробел + 6 номеров, pl: AU-I 123456 недопустимо регулярное выражение: ^ [AZ] {2} - [IVXLCMivxlcm] + \ d {6} $
6 цифр + 2 буквы, pl .: 123456AA регулярное выражение: ^ \ d {6} [AZ] {2} $
И запросы:Без RegExp для римских цифр
with test_set as
( select 'AE 232323' stg from dual union all
select 'AU-I 123456' from dual union all
select '123456AA' from dual
)
select stg,case when regexp_like(stg, '(^[A-Z]{2} \d{6}$|^\d{6}[A-Z]{2}$)') then 'Good' else 'Invalid' end id_ok
from test_set;
И с RegExp для римских цифр
with test_set as
( select 'AE 232323' stg from dual union all
select 'AU-I 123456' from dual union all
select '123456AA' from dual
)
select stg,case when regexp_like(stg, '(^[A-Z]{2} \d{6}$|^\d{6}[A-Z]{2}$)|^[A-Z]{2}-[IVXLCMivxlcm]+ \d{6}$') then 'Good' else 'Invalid' end id_ok
from test_set;