2016-06-09 317 views
0

这是SQL Server 2008查询。地址验证的正则表达式

我在寻找记录家庭地址的地方以'#'开头,然后是数字,然后是没有空格的字母。

这里的表中的地址的一个例子

Create table dbo.temp(Address Varchar(200)) 

INSERT into dbo.temp VALUES('#1000munoz River St') 
INSERT into dbo.temp VALUES('#656ave. Whitehall') 
INSERT into dbo.temp VALUES('#12 avenue') 
INSERT into dbo.temp VALUES('13 Main St') 

我要挑只

#1000munoz River St 
#656ave. Whitehall 

即第1个字符总是“#”,其次是1个或多个数字,其次是1或更多字母。我不想号码和字母之间的空间,如记录编号3.

我试图

Select * 
from dbo.temp 
where charindex('#', Address) = 1 
    and Address like '[#][0-9]^[:b][A-Za-z]%' 

这不返回任何值,我不知道为什么。

任何人都可以指向正确的方向吗?

感谢 卢比

+2

SQL服务器本身并不支持正则表达式。 'like'模式匹配更受限制。 –

回答

0

SQL Server不支持正则表达式。它有一个更有限的语法。我相信这适用于您的示例:

where address like '#[0-9]%[a-zA-Z] %' and 
     address like '#%[0-9][a-zA-Z] %' 

这不适用于所有示例,但它可能有所帮助。

0

我们面临同样的问题,并使用主数据服务功能修复它。我们真正需要的正则表达式上的SqlServer终于拿到了这样的函数之一:

CREATE FUNCTION [RegexExtract](@input [nvarchar](4000), @pattern [nvarchar](4000), @group [nvarchar](4000), @mask [tinyint]) RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER, RETURNS NULL ON NULL INPUT AS EXTERNAL NAME [Microsoft.MasterDataServices.DataQuality].[Microsoft.MasterDataServices.DataQuality.SqlClr].[RegexExtract] GO 

请点击此链接以获得更多信息:https://dyball.wordpress.com/2011/11/01/sql-2008-r2-regular-expressions/