SQL Server正则表达式选择

SQL Server正则表达式选择,sql,sql-server,regex,sql-server-2008,Sql,Sql Server,Regex,Sql Server 2008,我有一张包含电话的桌子,如下所示: Phone# ------------------ 1234567890 2548796584 9999 2126543133 9999999999 999999 999 9853 9999999 select * from Phones where 1 = dbo.RegExpLike(number, '^9+$') 现在我想要一个查询,它将返回只有数字9的行,在本例中,结果应该是 Phone# ------------------ 9999 99999

我有一张包含电话的桌子,如下所示:

Phone#
------------------
1234567890
2548796584
9999
2126543133
9999999999
999999
999
9853
9999999
select * from Phones
where 1 = dbo.RegExpLike(number, '^9+$')
现在我想要一个查询,它将返回只有数字9的行,在本例中,结果应该是

Phone#
------------------
9999
9999999999
999999
999
9999999

我在Oracle中听说过regex,但在Sql Server中没有听说过。我正在使用SQL server 2008 R2,请任何人帮助我,提前谢谢。

您可以使用如下查询:

Phone#
------------------
1234567890
2548796584
9999
2126543133
9999999999
999999
999
9853
9999999
select * from Phones
where 1 = dbo.RegExpLike(number, '^9+$')
您可以在此处查看有关使用正则表达式的更多示例:


您可以使用如下查询:

Phone#
------------------
1234567890
2548796584
9999
2126543133
9999999999
999999
999
9853
9999999
select * from Phones
where 1 = dbo.RegExpLike(number, '^9+$')
您可以在此处查看有关使用正则表达式的更多示例:


SQL Server的正则表达式功能有限,但您可以。使用下面的代码,您可以获得所需的内容

declare @table table (
  [phone] [sysname]);
insert into @table
        ([phone])
values      (N'1234567890'),
        (N'2548796584'),
        (N'9999'),
        (N'2126543133'),
        (N'9999999999'),
        (N'999999'),
        (N'999'),
        (N'9853'),
        (N'9999999');
select [phone] from   @table
where  patindex('%[0-8]%', [phone]) = 0;

SQL Server的正则表达式功能有限,但您可以。使用下面的代码,您可以获得所需的内容

declare @table table (
  [phone] [sysname]);
insert into @table
        ([phone])
values      (N'1234567890'),
        (N'2548796584'),
        (N'9999'),
        (N'2126543133'),
        (N'9999999999'),
        (N'999999'),
        (N'999'),
        (N'9853'),
        (N'9999999');
select [phone] from   @table
where  patindex('%[0-8]%', [phone]) = 0;

这里有一种比使用CLR更简单的方法。这种相似模式起作用的原因是我们发现的行与9不相似。正则表达式中的胡萝卜(^)表示不

create table #Phones
(
    Num varchar(20)
)

insert #Phones
select '1234567890' union all
select '2548796584' union all
select '9999' union all
select '2126543133' union all
select '9999999999' union all
select '999999' union all
select '999' union all
select '9853' union all
select '9999999' union all
select '12345'

select *
from #Phones
where Num not like '%[^9]%'

这里有一种比使用CLR更简单的方法。这种相似模式起作用的原因是我们发现的行与9不相似。正则表达式中的胡萝卜(^)表示不

create table #Phones
(
    Num varchar(20)
)

insert #Phones
select '1234567890' union all
select '2548796584' union all
select '9999' union all
select '2126543133' union all
select '9999999999' union all
select '999999' union all
select '999' union all
select '9853' union all
select '9999999' union all
select '12345'

select *
from #Phones
where Num not like '%[^9]%'

您可以尝试此查询

SELECT  * FROM Phones
WHERE Number NOT LIKE '%[^9]%'

您可以尝试此查询

SELECT  * FROM Phones
WHERE Number NOT LIKE '%[^9]%'

你不需要正则表达式的强大功能,你只需要使用
Phone#如“%9%”
转换为字符类型(如果需要)。这不会满足他们的要求@Laurence。OP表示他们希望返回唯一值为9的行。@SeanRange说得很对,没有听到。你不需要正则表达式的强大功能,你可以使用
Phone,如“%9%”
转换为字符类型(如果需要)。这不会满足@Laurence的要求。OP表示他们希望返回唯一值为9的行。@SeanRange完全正确,没有找到。添加对LIKE模式含义的解释,您就赢了!考虑下面的<代码>,其中Num不喜欢“% 9%”< /代码>。这将返回所有不包含9的行。类似地,
其中num与“%[0-9%]”不相似。
将返回不包含任何数字的所有行。方括号允许我们使用范围值。现在有趣的部分来了:克拉!这允许我们搜索不在范围内的内容,从而为我们提供了
其中num与“[^9]%”不同的内容。这将返回所有“除9之外不包含任何内容”的行,即“只包含9”的行!添加对相似模式含义的解释,您就赢了!考虑下面的<代码>,其中Num不喜欢“% 9%”< /代码>。这将返回所有不包含9的行。类似地,
其中num与“%[0-9%]”不相似。
将返回不包含任何数字的所有行。方括号允许我们使用范围值。现在有趣的部分来了:克拉!这允许我们搜索不在范围内的内容,从而为我们提供了
其中num与“[^9]%”不同的内容。这将返回所有“除9之外不包含任何内容”的行,即“只包含9”的行。它具有一些非常基本的正则表达式功能。看看我的答案。它有一些非常基本的正则表达式功能。请看我的答案。Kiran-电话号码通常可以包括非数字字符,例如,
+
()
-
等等。Kiran-电话号码通常可以包括非数字字符,例如,
+
()
-
等等。