2014-04-07 36 views
1

我有大約50種不同的字符串格式(例如00-000-000,123-456-789-123AAA,CHE-123.456.789IVA等)。這些是不同國家的TAX註冊號碼格式。如果遵守其國家/地區格式,我需要檢查每個公司的稅務登記號碼。我需要檢查兩個一致性級別。
1.字符串和子字符串的位數(例如11-111-11之前的第一個破折號之前的兩位數等等)
2.每個字符串的數字類型(字符數)。在SQL中檢查字符串格式 - ORACLE

SQL中可能嗎?我嘗試了一些函數,但都是關於字符串的大小和長度,而不是格式。

+1

你能告訴我們你到目前爲止試過的嗎? – Slim

+1

你可以用樣本更詳細地解釋一下嗎? – Hamidreza

+0

你可以嘗試像[regexp_like](http://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions018.htm) - 但據我所知,它並不是很快。 – Christian

回答

3

最好使用正則表達式。但是你必須爲所有國家格式定義這些。這是一個社會安全號碼: 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