SQL2000中,一个查询语句的问题,帮忙看看

孤芳-自赏 2009-12-03 09:58:36
要求根据所选的抽题条件过滤试题

试卷表:Table1

Code(编号) IPCode(所属题库) DiffLevel(题目难度1-9个系数) ItemType(题目类型0-3) KnowledgePoints(知识点编号,可以有多个知识点以“|”分开,如:k2|k3|k4)

1 IP001 2 1 K1|K2|K3
2 IP001 7 3 K1
3 IP002 4 3 K1|K3
4 IP001 5 2 K1|K2

现在要根据 IPCode,DiffLevel,ItemType,KnowledgePoints 四个条件查询试题,
在SQL2000中,查询语句怎么写

...全文
226 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java_And_NET 2009-12-04
  • 打赏
  • 举报
回复
"13楼用In好像不太行,可以考虑用存储过程,谢谢各位的帮忙!" 真可怜...
mbh0210 2009-12-03
  • 打赏
  • 举报
回复

declare @t table(Code int ,IPCode varchar(20), DiffLevel int , ItemType int, KnowledgePoints varchar(20))

insert into @t values(1,'IP001',2,1,'K1|K2|K3' )
insert into @t values(2,'IP001',7,3,'K1' )
insert into @t values(3,'IP002',4,3,'K1|K3' )
insert into @t values(4,'IP001',5,2,'K1|K2' )
insert into @t values(4,'IP001',5,2,'K1|K4|K2' )


select * from @t where IPCode='IP001' and ( charindex('K1'+'|',KnowledgePoints+'|')>0 and charindex('K2'+'|',KnowledgePoints+'|')>0)


把你的条件K1|K2拆分成
charindex('K1'+'|',KnowledgePoints+'|')>0 and charindex('K2'+'|',KnowledgePoints+'|')>0
孤芳-自赏 2009-12-03
  • 打赏
  • 举报
回复
好像和我要问的问题没有多大的关系, ,高手丢个语句来吧!
孤芳-自赏 2009-12-03
  • 打赏
  • 举报
回复
好像和我要问的问题没有多大的关系, ,高手丢个语句来吧!
huankfy 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mbh0210 的回复:]
SQL codedeclare@testvarchar(20)set@test='K1|K2|K3'selectCHARINDEX('K3'+'|',@test+'|')

类似这样判断,只要CHARINDEX>0即可
[/Quote]

这个支持
Mirana_NightShade 2009-12-03
  • 打赏
  • 举报
回复
up
孤芳-自赏 2009-12-03
  • 打赏
  • 举报
回复
例如说 我代码中获得知识点编号是“K2|K4”
按照#5的方法,我只能从数据库中查到
"K2|K4"
.........
却查询不到
"K2|K3|K4"


mbh0210 2009-12-03
  • 打赏
  • 举报
回复

declare @test varchar(20)

set @test ='K1|K2|K3'

select CHARINDEX('K3'+'|',@test+'|')



类似这样判断,只要CHARINDEX>0即可
zetee 2009-12-03
  • 打赏
  • 举报
回复
select * from table1 where IPCode=@IPCode and DiffLevel=@DiffLevel and DiffLevel=@DiffLevel
and KnowledgePoints like '%'+@KnowledgePoints+'%'
孤芳-自赏 2009-12-03
  • 打赏
  • 举报
回复
不可以这样的 ,knowledgePoints 的值是不确定的,有可能是1个选项,有可能是N个选项,我知道思路但不知道怎么写,要用for循环遍历选中几个知识点,然后用模糊查询like 查询,
因为SQL2000、SQL2005中,查询有个问题,例如说字段“abc”
我可以用like 和in 模糊查询到包涵"a","ab","abc","bc"的字段,却不能查询包涵"ac"的字段,
foryouwife 2009-12-03
  • 打赏
  • 举报
回复
select code from table1 where IPCode='"+IP001+"' or DiffLevel="2" or ItemType="1" or KnowledgePoints like '%"+K1+"%'
雷肿么了 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingggss 的回复:]
select  code  from  table1 where IPCode='"+IP001+"' AND DiffLevel="2" AND ItemType="1" AND KnowledgePoints='"+K1+"';
[/Quote]

这样写不行.

如果 KnowledgePoints 这个条件没输,
sql最后面会成这样,是会查不到数据的. AND KnowledgePoints='';
kingggss 2009-12-03
  • 打赏
  • 举报
回复
select code from table1 where IPCode='"+IP001+"' AND DiffLevel="2" AND ItemType="1" AND KnowledgePoints='"+K1+"';
孤芳-自赏 2009-12-03
  • 打赏
  • 举报
回复
12楼的方法不错,
但如果在不知道KnowledgePoints 的值的情况下,怎么弄,能说下吗?


13楼用In好像不太行,可以考虑用存储过程,谢谢各位的帮忙!
Java_And_NET 2009-12-03
  • 打赏
  • 举报
回复
select code from table1 where IPCode='"+IP001+"' AND DiffLevel="2" AND ItemType="1" AND KnowledgePoints IN (变量)
该变量里存的字符串是以逗号隔开的,比如:"K1|K2|K3,K1|K3,K1|K2";
偶遇到过,但没这样做,这样不安全,容易注入,建议用存储过程.

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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