从子字符串与子字符串比较的问题

fengzheng0306 2009-12-14 05:00:15
一个表,有四列,行数据如下
7,67,47 1,55,56 12,14,55 13471|54,13363|54,6128|54
4,55 11,2,14
1,2 6,7 1,4

每列现传入数据:
0,7,10,30,54;0,7,10,30,55;0,7,66;
1,2,3,4
1,2,3,4
6128

要求:
查询表中相应行:
1、 第一列,判断“;”内的数字列表,在第一列的某段中; 或
2、 第二列,判断数字列表,在第二列的某段中;或
3、 第三列,判断数字列表,在第三列的某段中;或
4、 第四列,每个“,”段中,第一个数字与查询数字相等;

如上查询,应该可以找到三行:
1、 第一行:因为0,7,10,30,54;中,与第一列的7,67,47可以对应;且第二个传入数字1,2,3,4与第二列的1,55,56对应;且第四个参数6128与第四列中13471|54,13363|54,6128|54对应;
2、 第二行:因为第二列的1,2,3,4,与4,55对应
3、 第三行:因为第三个参数1,2,3,4与第三列中1,4对应;
...全文
94 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjazzli 2009-12-15
  • 打赏
  • 举报
回复
---------------------------------------------
--> Author : jinjazzli
--> Target : ---->1000
--> Date : 2009-12-15 10:33:45
--> Version: SQL Server 2005
---------------------------------------------

--> 测试数据: @tb
declare @tb table (id varchar(100))
insert into @tb
select '7,67,47' union all
select '1,2,3,4,5,6,7' union all
select '22,33,44,55,66' union all
select '12,13,14,15'

declare @s1 varchar(10),@str varchar(1000)
set @s1='7,66,47'

set @str='select '+isnull(@str,'')+replace(@s1,',',' as id union all select ')

create table #t(id varchar(10))
insert #t exec(@str)


select distinct b.* from @tb b,#t a
where charindex(','+a.id+',',','+b.id+',')>0

id
----------------------------------------------------------------------------------------------------
1,2,3,4,5,6,7
22,33,44,55,66
7,67,47

drop table #t
fengzheng0306 2009-12-15
  • 打赏
  • 举报
回复
感谢大家,其他的已经解决,现在只需要解决下面一个问题

表中有一列,参考行数据如下:
第1行:7,67,47
第2行:1,2,3,4,5,6,7
第3行:22,33,44,55,66
第4行:12,13,14,15

传入数据
7,66,47

查询结果
1,2,3共三行

原因:
第1行:7,66,47在第1行7,67,47中,出现7,47
第2行:7,66,47在第2行1,2,3,4,5,6,7中,出现7
第3行:7,66,47在第3行22,33,44,55,66中,出现66
feixianxxx 2009-12-14
  • 打赏
  • 举报
回复
、、、
ai_li7758521 2009-12-14
  • 打赏
  • 举报
回复
给出示例数据,和要得到的结果。
fengzheng0306 2009-12-14
  • 打赏
  • 举报
回复
确实不好描述:

第一列:
7,67,47
1,2
55,66

传入数据
0,7,10,30,54;0,7,10,30,55;0,7,66;

则应该可以找到第一、第三行,原因
0,7,10,30,54;中的7在第一行7,67,47中出现;
0,7,10,30,55;中的55在第三行55,66中出现;
0,7,66;中的66在第三行55,66中出现;


以第二列为例:
1,55,56
4,55
6,7

我现在传入
1,2,3,4

按规则,应该可以打到第一行和第二行,原因:
1,2,3,4中的1在第一行1,55,56中出现
1,2,3,4中的4在第二行4,55中出现


第三列与第二列类似

再与第四列为例,有数据
13471|54,13363|54,6128|54
2|3,44|55

现传入数据6128
则应该可以找到第一行,原因:
6128在第一行13471|54,13363|54,6128|54中出现
jinjazzli 2009-12-14
  • 打赏
  • 举报
回复

第一列,判断“;”内的数字列表,在第一列的某段中; 或

看不懂
fengzheng0306 2009-12-14
  • 打赏
  • 举报
回复
一个表,有四列,行数据如下
7,67,47 -- 1,55,56 -- 12,14,55 -- 13471|54,13363|54,6128|54
NULL -- 4,55 -- 11,2,14 -- NULL
1,2 -- 6,7 -- 1,4 -- NULL
--小F-- 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 guguda2008 的回复:]
晕了,交给小F
[/Quote]
交给乌龟
nianran520 2009-12-14
  • 打赏
  • 举报
回复
这个。绕口。
guguda2008 2009-12-14
  • 打赏
  • 举报
回复
晕了,交给小F

22,209

社区成员

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

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