-3

我们可以对这四个条件使用一个正则表达式吗?

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

2 回答 2

0

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

我建议您查看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

上面的脚本生成以下结果:

在此处输入图像描述

于 2012-11-17T21:53:51.647 回答
0

就像您已经被告知的那样,SQL Server 本身不支持正则表达式,一种可能的解决方案是求助于 CLR。

但是,或者,您可以将四个条件减少到只有一个,如下所示:

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

确实,这种情况可能会使您的查询不可分割,但如果您将其用作过滤器,那么您的查询无论如何都会变成不可分割的。LIKE '%whatever'

于 2012-11-19T06:24:04.030 回答