我们可以使用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在执行存储过程时可以减少空格或空格,连字符( - )值。
答案 0 :(得分:1)
使用REPLACE
命令。
它会将单个空格替换为%
,因此它会返回您的预期结果:
SELECT *
FROM tblPerson
WHERE UPPER(Name) LIKE REPLACE(UPPER(@Condition), ' ', '%') + '%'
答案 1 :(得分:0)
我使用了REPLACE
命令。最重要的是您需要在REPLACE
或LIKE
关键字的两侧使用=
。
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),' ',''),'-','')