使用正则表达式

时间:2016-07-16 06:15:45

标签: regex stored-procedures sql-server-2012 sql-like

我们可以使用Regex,即SQL Server中的正则表达式吗?我正在使用SQL-2012和2014,并且需要匹配并返回来自我的存储过程的输入。

我不能在这种情况下使用LIKE,因为只返回匹配的单词,使用正则表达式我可以匹配像Space,Hyphen,Numbers这样的整个字符。

这是我的SP

--Suppose XYZ P is my Search Condition
Declare @Condition varchar(50) = 'XYZ P'

CREATE PROCEDURE [dbo].[usp_MATCHNAME]
    @Condition varchar(25)
as
Begin

select * from tblPerson
where UPPER(Name) like UPPER(@Condition) + '%'
-- It should return both XYZ P and xyzp
End

这里我的SP将返回Name = XYZ P的所有匹配条件,但是如何检索名称为[XYZP,XYZ-P]的其他列

如果搜索条件具有任何字母数字值,如

--Suppose XYZ 1 is my Search Condition
Declare @Condition varchar(50) = 'XYZ 1'

然后我的搜索结果也应该返回非空格值,如[XYZ1,xyz1,Xyz -1]。

我不想通过查找空间并根据空间拆分然后匹配来使用Substring。

注意:我的输入条件,即@Condition在执行存储过程时可以减少空格或空格,连字符( - )值。

2 个答案:

答案 0 :(得分:1)

使用REPLACE命令。

它会将单个空格替换为%,因此它会返回您的预期结果:

SELECT * 
FROM tblPerson
WHERE UPPER(Name) LIKE REPLACE(UPPER(@Condition), ' ', '%') + '%'

答案 1 :(得分:0)

我使用了REPLACE命令。最重要的是您需要在REPLACELIKE关键字的两侧使用=

DECLARE @table TABLE (id int,item VARCHAR(50))
INSERT @table VALUES (1,'ABCDEF')
INSERT @table VALUES (2,'ABC DEF')
INSERT @table VALUES (3,'ABC-DEF')
INSERT @table VALUES (4,'XYZ')
INSERT @table VALUES (5,'ABC  DEF')
INSERT @table VALUES (6,'ABCxyzDEF')

DECLARE @condition VARCHAR(50) = 'ABC-DEF'

SELECT * FROM @table 
WHERE REPLACE(REPLACE(item,' ',''),'-','') LIKE REPLACE(REPLACE(@condition,' ',''),'-','')

以上查询的输出为:

id  item
1   ABCDEF
2   ABC DEF
3   ABC-DEF
5   ABC  DEF

在您的情况下,查询将是:

SELECT * FROM tblPerson
WHERE REPLACE(REPLACE(UPPER(Name),' ',''),'-','') LIKE REPLACE(REPLACE(UPPER(@Condition),' ',''),'-','')