SQL Server 2005 中的 Contains Like 搜索





0/5 (0投票)
SQL Server 2005 中类似于 Contains 的搜索。这是我在 wiki 上的第一篇帖子。在这里我将展示如何在 sql server 2005 中进行类似于 contains 的搜索。存在
SQL Server 2005 中类似于 Contains 的搜索
这是我在 wiki 上的第一篇帖子。在这里我将展示如何在 sql server 2005 中进行类似于 contains 的搜索。
Sql server 2005 中没有内置的类似于 contains 的函数。
首先,创建一个自定义函数,如下所示。
CREATE FUNCTION [dbo].[Contain](@ColumnName varchar(100), @String varchar(8000))
returns @temptable TABLE (items nvarchar(max))
as
begin
declare @idx int
declare @slice varchar(8000)
declare @temp nvarchar(Max)
Set @temp=''
declare @Delimiter char(1)
Set @Delimiter=' '
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@temp)>0)
Set @temp =@temp+ 'OR '+@ColumnName+ ' like ''%'+@slice+'%'''
Else
Set @temp =@temp+ @ColumnName+ ' like ''%'+@slice+'%'''
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
if(len(@temp)>0)
insert into @temptable(Items) values(@temp)
return
end
创建 contain 函数后,创建一个查询表的存储过程。我这里使用了一个 EmployeeInfo 表。
Create proc SelectEmp
(
@Name nvarchar(200),
@ConditionValue nvarchar(500)
)
--@WhereCon nvarchar(500)
As
Begin
Declare @Sql nvarchar(Max)
Declare @WhereCondition nvarchar(300)
Set @WhereCondition= (select * From [dbo].Contain(@Name,@ConditionValue))
Set @Sql = 'select * from EmployeeInfo'
if(len(@WhereCondition)>0 And @WhereCondition is not null)
Set @Sql= @Sql+' Where ' +Replace(@WhereCondition,'''','''')
EXEC sp_executesql @SQL
End
如果一切顺利,你可以从服务器端或任何你使用的地方调用你的存储过程。
示例
SelectEmp 'Name','Mountain Dew'
SelectEmp 'Name','Dew Mountain'
SelectEmp 'Name','Mountain'
SelectEmp 'Name','Dew'
谢谢。