正则表达式以获取具有特殊字符的数据

时间:2015-12-11 13:59:45

标签: sql sql-server regex

我的表格列upn中有一些数据。

以下是此数据的一小部分样本。

Pasquale.Rombolà@it.eurw.domain.net
JuanMaria.RomanGonçalves@eurs.domain.net
Santo.Paternò@it.eurw.domain.net
Peter.Browne@UK.EURW.domain.net
François.ESTIN@fr.eurw.domain.net
Frédéric.Huynh@fr.eurw.domain.net
Frédérique.Psaume@fr.eurw.domain.net
Laura.PiñeiroGomez@eurs.domain.net
Maria.AranzabalSaldaña@eurs.domain.net
Alberto.RubioMuñoz@eurs.domain.net
Peter.Brüggemann@UK.EURW.domain.net
Russel.Peters@CA.domain.net

我想查询此表中的UPN值,其中我在UPN中有一些特殊字符。所以我的查询不应该返回如下内容:

Peter.Browne@UK.EURW.domain.net

Russel.Peters@CA.domain.net

但是使用[à,ò,ñ,ü ...etc]

等特殊字符返回其他所有内容

我已尝试过此查询,但无效。

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

它会返回所有内容,包括那些没有任何特殊字符的内容。

请帮忙。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为你只需要添加一个“^”作为方括号内的第一个字符。

目前你说你想要返回所有那些在你给出的列表中有一个或多个字符的UPN(即“普通”字符)。 “^”应该反转并给你所有的UPN,其中至少有一个字符不在你给出的列表中。

更新:在本地测试后...确保您的排序规则为“Accent Sensitive”(如果需要,请在“like”子句后添加“Latin1_General_CI_AS”或类似内容。

我发现它只有在不是“A-Z”的情况下才有效,我实际输入了整个字母。

答案 1 :(得分:0)

您需要在其中添加二进制collat​​e子句。根据您的数据选择必要的整理。对于给定的样本数据 Latin1_General_BIN 有效。
这是sql server中用于排序的link。 这个片段在我的机器上为我工作 -

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

insert into #t values 
('Pasquale.Rombolà@it.eurw.domain.net'),
('JuanMaria.RomanGonçalves@eurs.domain.net'),
('Santo.Paternò@it.eurw.domain.net'),
('Peter.Browne@UK.EURW.domain.net'),
('François.ESTIN@fr.eurw.domain.net'),
('Frédéric.Huynh@fr.eurw.domain.net'),
('Frédérique.Psaume@fr.eurw.domain.net'),
('Laura.PiñeiroGomez@eurs.domain.net'),
('Maria.AranzabalSaldaña@eurs.domain.net'),
('Alberto.RubioMuñoz@eurs.domain.net'),
('Peter.Brüggemann@UK.EURW.domain.net'),
('Russel.Peters@CA.domain.net');

select * from #t where name not like '%[^a-zA-Z0-9@.]%' COLLATE Latin1_General_BIN;

输出 -
Peter.Browne@UK.EURW.domain.net
Russel.Peters@CA.domain.net