详解如何使用SQL中文分词组件查询表记录

本文介绍了一个使用SQL存储过程实现的搜索功能,该过程能够处理复杂的关键词查询,并通过层级拆分进行模糊匹配,最终返回与关键词最匹配的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

CREATEPROCEDURE [dbo].[Search_Test] @Keyword nvarchar(50)='' AS BEGIN SET NOCOUNT ON DECLARE @Condition NVARCHAR(1000) SET @Condition = '1 = 1' DECLARE @Tables VARCHAR(100) SET @Tables = '[vw_tmp] a ' DECLARE @Sql NVARCHAR(4000) SET @Sql = '' IF @Keyword <>'' BEGIN declare @Filter as varchar(max) declare @Str as varchar(1000) if right(@Keyword,1)<>'/' set @Str=@Keyword '/' else set @Str=@Keyword set @Filter=' ' declare @Ch as varchar(100) while(@Str<>'') begin set @Ch=left(@Str,charindex('/',@Str,1)-1) set @Str=stuff(@Str,1,charindex('/',@Str,1),'') set @Filter=@Filter ' or [product_tag] LIKE ''%' @Ch '%''' end if charindex('/',@Keyword,1)>0 set @Keyword=replace(@Keyword,'/','') SET @Condition = ' (a.[product_tag] LIKE ''%' @Keyword '%'' ' @Filter ' )' END SET @Sql = @Sql ' SELECT top 1 a.* FROM ' @Tables ' WHERE ' @Condition 'order by CHARINDEX(''' @Keyword ''', product_tag, 1) desc' --排序根据最匹配的内容放在最前面 print @sql EXEC sp_executesql @Sql, N'@keyword nvarchar(500)=NULL', @Keyword END
EXEC @return_value = [dbo].[Search_Test] @keyword = N'中秋/春节' SELECT 'Return Value' = @return_value

返回的SQL为

SELECT top 1 a.* FROM [vw_tmp] a WHERE (a.[product_tag] LIKE '%中秋春节%' or [product_tag] LIKE '%中秋%' or [product_tag] LIKE '%春节%' )
order by CHARINDEX('中秋春节', product_tag, 1) desc

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值