sqlServer中如何比较两个字符串相似!?

chengchengge 2009-08-13 03:23:29
假如有一个字符串String1="book,net,job"
数据库中存有字符串String2="desk,job,linux,good"
判断两个字符串相似的规则是:只要有一个单词相同就认为相似
String1和String2中都有"job",所以认为是相似的
用sql语句怎么来实现查询呢??
...全文
1107 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengchengge 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guguda2008 的回复:]
引用 7 楼 liangck 的回复:
SQL codedeclare@string='book,net.job';--将字符串分解成:col---book
net
job---------------------------declare@ttable(colvarchar(20));insert@tselectsubstring(@string,number,charindex(',',@string+',',number)-number)from master.dbo.spt_valueswhere type='p'andsubstring(','+@string,number,1)=',';--与数据库数据比较select*from tbas awhereexists(select*from@twherecharindex(','+col+',',','+a.string+',')>0);

MARK顶梁哥这个
[/Quote]



declare @string VARCHAR(20)
SET @string='ACC,IT'

declare @t table(col varchar(20))
insert @t
select substring(@string,number,charindex(',',@string+',',number)-number)
from master.dbo.spt_values
where type='p'
and substring(','+@string,number,1)=','

select *
from [tbl_job_adjusted_analysis] as a
where exists(select * from @t
where charindex(','+col+',',','+a.C_DIV_ID+',')>0)
7楼的是可以,但是我还得加其他搜索条件
chengchengge 2009-08-13
  • 打赏
  • 举报
回复
谢谢各位
因为我是用于搜索,比如某个用户保存的爱好有“篮球,足球,乒乓球等等”,在搜索时选择了爱好有篮球、足球等选项,显示时把所有爱好中有篮球或足球的用户都显示出来
当然可能还有其他条件如性别=男等等组合成一个查询
SQL77 2009-08-13
  • 打赏
  • 举报
回复
假如有一个字符串String1="book,net,job"
数据库中存有字符串String2="desk,job,linux,good"
先把String1拆分成数组,再用循环

觉得楼主这个在程序更方便,用STRING2.INDEXOF(MY[I])>0就相似
jiangshun 2009-08-13
  • 打赏
  • 举报
回复

declare @s1 varchar(30),@s2 varchar(30)
set @s1='book,net,job'
set @s2='desk,job,linux,good,good'

create table tbl1(id int,keywords nvarchar(1000))
insert tbl1 select 1,@s1
union all select 2,@s2


select top 1000 id=identity(int,1,1) into 序数表 from syscolumns a,syscolumns b
alter table 序数表 add constraint pk_id_序数表 primary key(id)
go

select keyword=cast(substring(a.keywords,b.id,charindex(',',a.keywords+',',b.id)-b.id) as char(10))
,[count]=count(distinct a.id)
from tbl1 a,序数表 b
where b.id<=len(a.keywords)
and substring(','+a.keywords,b.id,1)=','
group by substring(a.keywords,b.id,charindex(',',a.keywords+',',b.id)-b.id)


--只要count列中有大于2的值就可以判断相似

/*
keyword count
---------- -----------
book 1
desk 1
good 1
job 2
linux 1
net 1

(6 行受影响)

*/

drop table 序数表,tbl1
guguda2008 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chengchengge 的回复:]
引用 1 楼 josy 的回复:
如果j o b 是在三个单词里面的算不算相似?
  不算  只能是一个单词才算
[/Quote]
LZ试一下7L的
guguda2008 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liangck 的回复:]
SQL codedeclare@string='book,net.job';--将字符串分解成:col---book
net
job---------------------------declare@ttable(colvarchar(20));insert@tselectsubstring(@string,number,charindex(',',@string+',',number)-number)from master.dbo.spt_valueswhere type='p'andsubstring(','+@string,number,1)=',';--与数据库数据比较select*from tbas awhereexists(select*from@twherecharindex(','+col+',',','+a.string+',')>0);
[/Quote]
MARK顶梁哥这个
chengchengge 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
如果j o b 是在三个单词里面的算不算相似?
[/Quote] 不算 只能是一个单词才算
feixianxxx 2009-08-13
  • 打赏
  • 举报
回复
拆了 再用charindex 比下酒可以了
csdyyr 2009-08-13
  • 打赏
  • 举报
回复
create table #t1 (col varchar(100))
create table #t2 (col varchar(100))

declare @string1 varchar(100),@string2 varchar(100)
set @string1='book,net,job'
set @string2='desk,job,linux,good'

set @string1='select '''+replace(@string1,',',''' union all select ''')+''''
set @string2='select '''+replace(@string2,',',''' union all select ''')+''''

insert #t1
exec(@string1)

insert #t2
exec(@string2)

select *
from #t1 as t1 join #t2 as t2
on t1.col=t2.col

drop table #t1,#t2
--小F-- 2009-08-13
  • 打赏
  • 举报
回复
difference函数
返回一个整数值,指示两个字符表达式的 SOUNDEX 值之间的差异。
返回的整数是 SOUNDEX 值中相同字符的个数。返回的值从 0 到 4 不等:0 表示几乎不同或完全不同,4 表示几乎相同或完全相同。
SELECT difference('lihan','liha')
-----------
3

(所影响的行数为 1 行)
liangCK 2009-08-13
  • 打赏
  • 举报
回复
declare @string = 'book,net.job';

--将字符串分解成:
col
---
book
net
job

---------------------------

declare @t table(col varchar(20));
insert @t
select substring(@string,number,charindex(',',@string+',',number)-number)
from master.dbo.spt_values
where type='p'
and substring(','+@string,number,1)=',';

--与数据库数据比较

select *
from tb as a
where exists(select * from @t
where charindex(','+col+',',','+a.string+',')>0);
SQL77 2009-08-13
  • 打赏
  • 举报
回复
IF( 
SELECT DIFFERENCE ( 'book,net,job' ,'desk,job,linux,good' ) )>0
PRINT '相似'
ELSE
PRINT '不相似'

相似
jwdream2008 2009-08-13
  • 打赏
  • 举报
回复
帮顶!
SQL77 2009-08-13
  • 打赏
  • 举报
回复
IF(
SELECT DIFFERENCE ( 'book,net,job' ,'desk,job,linux,good' ) )>0
PRINT '相似'
ELSE
PRINT '不相似'

相似




SQL77 2009-08-13
  • 打赏
  • 举报
回复
SELECT DIFFERENCE ( 'book,net,job' ,'desk,job,linux,good' ) 

-----------
2

(所影响的行数为 1 行)
htl258_Tony 2009-08-13
  • 打赏
  • 举报
回复
只有拆分了才能比较。
百年树人 2009-08-13
  • 打赏
  • 举报
回复
如果j o b 是在三个单词里面的算不算相似?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧