Проверка формата строк в SQL - ORACLE

У меня есть около 50 различных форматов строк (например, 00-000-000, 123-456-789-123AAA, CHE-123.456.789IVA... и т. д.). Это форматы налоговых регистрационных номеров для разных стран. Мне нужно проверить регистрационный номер налогоплательщика каждой компании, соответствует ли он формату своей страны или нет. Мне нужно проверить два уровня соответствия.
1. Количество цифр для строки и подстрок (например, две цифры перед первым дефисом в 11-111-11 и т. д.)
2. Тип цифры для каждой строки (количество символов).

Возможно ли это в SQL? Я пробовал некоторые функции, но все о размере и длине строки, а не о формате.


person Hawk    schedule 07.04.2014    source источник
comment
Можете ли вы показать нам, что вы пробовали до сих пор?   -  person Slim    schedule 07.04.2014
comment
Не могли бы вы объяснить это подробнее с образцом?   -  person Hamidreza    schedule 07.04.2014
comment
Вы можете попробовать что-то вроде regexp_like, но это не так. очень быстро, насколько я знаю.   -  person Christian    schedule 07.04.2014
comment
Решение, которое я ищу, точно такое же, как то, что @Robert Merkwürdigeliebe предложил ниже, за исключением того, что я искал более общее, которое можно применять ко всем форматам, вместо того, чтобы писать запрос для каждого формата страны   -  person Hawk    schedule 07.04.2014


Ответы (1)


Лучше всего использовать регулярные выражения. Но вам придется определить их для всех форматов страны. Это для номера социального страхования: 3 цифры, тире, 2 цифры, тире, 4 цифры.

create table re (country varchar2(10),reg varchar2(100));

insert into re values ('us','^[0-9]{3}-[0-9]{2}-[0-9]{4}$');

select 
   case when regexp_like('987-65-4321' ,reg) 
      then 'Match Found' 
      else 'No Match Found' 
   end as output 
from re
where country = 'us';

Match Found
person Rob van Laarhoven    schedule 07.04.2014