正则表达式或条件

时间:2012-11-17 18:36:15

标签: sql-server regex

我们可以为这四种情况使用一个正则表达式吗?

select * from ExceEnt where 
   FirstName Like @name+'[ ]%' 
or FirstName=@name 
or FirstName Like'%[ ]'+@name
or FirstName Like'%[ ]'+@name+'[ ]%'

2 个答案:

答案 0 :(得分:0)

可能是我完全不理解你,但我希望你需要一个能够完全匹配的表达式,它的一部分,以你要求搜索的data开头或结束。< / p>

我建议您查看 PATINDEX MSDN)方法,将上述四个方法合并为一个实体。

检查此示例:(这可以帮助您找出问题所在)

--Drop table if table already exists 
if exists(select * from sys.tables where object_id=object_id('ExceEnt'))
drop table ExceEnt
GO

--Create table
create table ExceEnt
(
  FirstName varchar(200) NULL
)
GO

--Insert some data
insert into ExceEnt values('Never')
insert into ExceEnt values('Hopeless')
insert into ExceEnt values('NeverHopeless')
insert into ExceEnt values('As the name says NeverHopeless')
insert into ExceEnt values('Exclude others')
insert into ExceEnt values('Exclude this one too')

--Here use PATINDEX to find desired result
select * from ExceEnt where patindex('%Hopeless%',FirstName)>0

以上脚本生成以下结果:

enter image description here

答案 1 :(得分:0)

与您have already been told一样,SQL Server本身不支持正则表达式,一种可能的解决方案是使用CLR。

但是,您可以将四个条件减少到只有这样的条件:

…
WHERE ' ' + FirstName + ' ' LIKE '% ' + @name + ' %'
      -- or, if you prefer: LIKE '%[ ]' + @name + '[ ]%'

确实,这种情况可能会导致您的查询不是sargable,但如果您使用LIKE '%whatever'作为过滤器,则无论如何您的查询都会变得无法搜索。