请教一个有难度的SQL语句?
一个表有多个记录,有一个KEYWORD字段,表示为关键字,而且要支持多个关键字,所以用了分号或者其它符号把它们隔开,如果现在要把其中一条记录的KEYWORD的值提取出来去和表中每条记录的KEYWORD做比较,再把相似的记录取出,SQL怎么写?
比如,一个记录的KEYWORD为”软件;硬件;电脑”
那么其它记录有可能是” 软件;手机”啥的.所以就得把单条的记录的KEYWORD里面的三个不同的关键字再与其它记录的KEYWORD里面的不同的多个关键字做对比,只要有一个关键字匹配的就把它取出来.SQL怎么写?能不能实现.
问题点数:50、回复次数:4Top
1 楼lsqkeke(可可)回复于 2006-03-02 15:40:51 得分 5
用函数吧,返回比一表变量的形式显示能匹配的数据集Top
2 楼ping3000(苦练葵花点穴手)回复于 2006-03-02 16:30:22 得分 20
DECLARE @keyword NVARCHAR(500)
DECLARE @start INT,@end INT
DECLARE @sql NVARCHAR(1000)
SET @keyword = '软件;硬件;电脑'
SET @sql = ' 1=0 '
SET @start = 1
SET @end = CHARINDEX(';', @keyword, @start)
IF @end = 0 BEGIN SET @end = LEN(@keyword) + 1 END
WHILE(@end > @start)
BEGIN
SET @sql = @sql + ' OR KEYWORD like ''%' + SUBSTRING(@keyword, @start, @end - @start) + '%'''
SET @start = @end + 1
SET @end = CHARINDEX(';', @keyword, @start)
IF @end = 0
BEGIN
SET @end = LEN(@keyword) + 1
END
END
exec ('select * from 表 where ' + @sql)Top
3 楼ping3000(苦练葵花点穴手)回复于 2006-03-02 16:36:48 得分 5
可以把KEYWORD拆开,和主键放到一个关联表中,那样做这种查询效率会好一些Top
4 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-02 16:47:07 得分 20
create table t_a(keyword varchar(100))
insert into t_a select '软件;硬件;电脑'
insert into t_a select '软件;手机'
insert into t_a select '软件'
insert into t_a select '手机'
if exists(select 1 from sysobjects where id=object_id(N'f_Occur') and xtype='FN')
drop function f_Occur
go
create function f_Occur(@String varchar(1000),@Separator varchar(2),@DestStr varchar(1000))
returns int
as
begin
declare @i int
set @i=0
while charindex(@Separator,@String)>0
begin
if charindex(rtrim(ltrim(left(@String,charindex(';',@String)-1))),@DestStr)>0
begin
set @i=1
break
end
select @String=stuff(@String,1,charindex(';',@String),'')
end
if charindex(rtrim(ltrim(@String)),@DestStr)>0
begin
set @i=1
end
return(@i)
end
go
select * from t_a a where exists(select 1 from t_a where dbo.f_occur('硬件;手机',';',a.keyword)=1)
Top




