求大神解决一个用SQL过滤查询的问题

guanyelong 2012-05-24 02:58:58
表名 User

id name scorelist
1 张三 76,78,81
2 赵四 87,76,8
3 王五 71,18,20
4 小强 54,8,88

查出scorelist中得八分的数据
...全文
234 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanyelong 2012-05-26
  • 打赏
  • 举报
回复
问题已经解决,一位CSDN大神帮我的

select * from [user] where charindex(',8,',','+scorelist+',')>0
紫魂一号 2012-05-24
  • 打赏
  • 举报
回复
额二楼的没注意,原来可以这样哈,我这里也可以的。
紫魂一号 2012-05-24
  • 打赏
  • 举报
回复
绝对的经典哈.呵呵sql语句相当精炼
紫魂一号 2012-05-24
  • 打赏
  • 举报
回复
给你一个经典的哈

--先创建一个函数
create function fun_split
(
@scorelist varchar(2000),--scorelist
@split varchar(2) --分割符
)
returns varchar(100) --返回符合条件的scorelist
as
begin
declare
@checked varchar(100),
@result varchar(100),
@flag char(1)
set @result = @scorelist

while(charindex(@split,@scorelist)<>0) --以","分割查找索引
begin
set @checked = substring(@scorelist,1,charindex(@split,@scorelist)-1) --获取第一个","前的分数
if(ltrim(rtrim(@checked)) = '8') --81,76
begin
set @flag = 'Y'
break
end
set @scorelist=stuff(@scorelist,1,charindex(@split,@scorelist),'') -- 索引剩下的
if (ltrim(rtrim(@scorelist)) = '8')
begin
set @flag = 'Y'
break
end
end
if (@flag = 'Y')
begin
set @result = @result
end
else
begin
set @result = ''
end
return @result
end
go
--这里是调用,觉得符合你的要求
select * from [USER] where scorelist in(dbo.fun_split(scorelist,','))

hebingyu 2012-05-24
  • 打赏
  • 举报
回复
Split()分出来好用的哦,我用过,没发现有什么问题
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

DataRow dr;
string sql="select scorelist from user where id=1 ";
......
.....
dr.Read();
string strvideoid = dr["VideoID"].ToString();
string[] ss = strvideoid.Split(',');
string cun = "";
fo……
[/Quote]
xmhxjjq 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
DataRow dr;
string sql="select scorelist from user where id=1 ";
......
.....
dr.Read();
string strvideoid = dr["VideoID"].ToString();
string[] ss = strvideoid.Split(',');
string cun = "";
for……
[/Quote]

方法不错。 不过如果- - 他已经读到后台了。 那就应该很简单了。
Split() 个人觉得。。 各种坑。。。
很多用,分隔的东西他都读不出来。。。

hebingyu 2012-05-24
  • 打赏
  • 举报
回复
DataRow dr;
string sql="select scorelist from user where id=1 ";
......
.....
dr.Read();
string strvideoid = dr["VideoID"].ToString();
string[] ss = strvideoid.Split(',');
string cun = "";
for (int i = 0; i < ss.Length; i++)
{
cun = ss[i].ToString();
if(cun==8)
{

}
}
这个只能根据ID或者名称来查一条一条的查,查出来再分开看有没有8,如果要全部一起查的话就复杂点了
xmhxjjq 2012-05-24
  • 打赏
  • 举报
回复
select * from table where scorelist like '%,8,%' or scorelist '8,%' or scorelist like '%,8'

就这3钟模式,。

8分别在第一个,中间,最后。 就这样。。
大致的东西。 其他的需要自己弄下。
bdmh 2012-05-24
  • 打赏
  • 举报
回复
你这个还得看8的情况,是否完整的8,还是包含8了,如果是完整的8,还得看8的位置了,你还是写个存储过程好控制些
devilzone 2012-05-24
  • 打赏
  • 举报
回复
select * from [USER] where CHARINDEX(',8,',','+scorelist+',')>0
tonyze 2012-05-24
  • 打赏
  • 举报
回复
这是什么问题,我智商不支持了。。。?

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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