正则表达式用于地址验证

时间:2016-06-09 19:52:33

标签: sql-server sql-server-2008

这是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

即。第一个字符始终为'#',后跟一个或多个数字,后跟一个或多个字母。我不想在数字和字母之间留出空格,比如记录号3。

我试过

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

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

有人能指出我正确的方向吗?

由于 RS

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我们遇到了同样的问题并使用主数据服务功能修复了它。我们确实需要在SqlServer上使用RegExp,最后得到一个像这样的函数:

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/