2015-12-11 58 views
0

我的表格列upn中有一些數據。正則表達式來獲取帶有特殊字符的數據

這裏是這個數據的一個小樣本集。

Pasquale.Rombolà@it.eurw.domain.net 
JuanMaria.RomanGonç[email protected] 
Santo.Paternò@it.eurw.domain.net 
[email protected] 
Franç[email protected] 
Frédé[email protected] 
Frédé[email protected] 
Laura.Piñ[email protected] 
Maria.AranzabalSaldañ[email protected] 
Alberto.RubioMuñ[email protected] 
Peter.Brü[email protected] 
[email protected] 

我想查詢此表中的UPN值,我在UPN中有一些特殊字符。所以我的查詢不應該返回的UPN如:

[email protected] 

[email protected] 

但返回其他一切有特殊字符,如[à,ò,ñ,ü ...etc]

我曾嘗試此查詢,但它不工作。

Select * from TableName 
Where [UPN] like %[a-z,0-9,@,\.,-,A-Z]% 

它返回所有包括那些沒有任何特殊字符的東西。

請幫忙。

回答

0

如果我理解正確,我認爲你只需要添加一個「^」作爲方括號內的第一個字符。

目前你說你想要返回所有那些你給出的列表中有一個或多個字符(即「普通」字符)的UPN。 「^」應該顛倒這一點,併爲您提供所有UPN,其中至少有一個角色不在您提供的列表中。

更新:本地測試後...確保您的排序規則是「區分重音」(如果需要添加「Latin1_General_CI_AS」或類似的後您的「喜歡」條款

我發現它只是工作,如果不是「。 AZ」,其實我打出來的全字母。

0

你需要在它添加二進制整理條款。之所以選擇必要的歸類,按您的數據。對於給定的樣本數據Latin1_General_BIN作品。
這裏是link的排序規則sql server。 這段代碼在我的機器上爲我工作 -

create table #t (name varchar(100)); 

insert into #t values 
('Pasquale.Rombolà@it.eurw.domain.net'), 
('JuanMaria.RomanGonç[email protected]'), 
('Santo.Paternò@it.eurw.domain.net'), 
('[email protected]'), 
('Franç[email protected]'), 
('Frédé[email protected]'), 
('Frédé[email protected]'), 
('Laura.Piñ[email protected]'), 
('Maria.AranzabalSaldañ[email protected]'), 
('Alberto.RubioMuñ[email protected]'), 
('Peter.Brü[email protected]'), 
('[email protected]'); 

select * from #t where name not like '%[^[email protected]]%' COLLATE Latin1_General_BIN; 

輸出 -
[email protected]
[email protected]

+0

我認爲他想這些結果中排除 – Mihai

+0

我們只需要翻轉where子句。 select * from #t其中名稱如'%[^ a-zA-Z0-9 @。%''COLLATE Latin1_General_BIN;我使用NOT子句來減少輸出中的行數,以回覆帖子:) – nil