关于SQLSERVER中 SUM() CHARINDEX() 等的现实案例问题,求帮助

关于SQLSERVER中 SUM() CHARINDEX() 等的现实案例问题,求帮助,第1张

1首先,个人认为你的这个表设计不是很合理,范式高一点的话,水箱有一个基础信息表,水q有一个基础信息表,然后俩者有一个关系中间表,这算标准模式吧

再说即使按这种冗余设计的话,你也别把一个水箱对应的多个水q搞一个字符保存数据吧,这个怎么看怎么别扭比如你1号水箱对应了 1,3,4这3个水q, 不要想着一条数据记录这种一对多的关系简单,变成1-1,1-3,1-4这样3条记录,也就不用这样痛苦了

2,既然你都这么干了,我提供一下解决办法吧,我对CHARINDEX() 这个函数用得少,但是大概看了一下,但是和你用的方式用的方式有点不一样,看你放不方便用了

--首先使用CHARINDEX() 这个函数做一个分割函数,该函数只负责切割

--字符分割函数

create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100))

returns @temp table(F1 varchar(100))

as

begin

declare @ch as varchar(100)

set @SourceSql=@SourceSql+@StrSeprate

while(@SourceSql<>'')

begin

set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)

insert @temp values(@ch)

set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')

end

return

end

----调用select from dbof_splitstr('1,3,4',',')

你会得到1,3,4这样的一个结果集

---然后就好办了,你需要的东西变成了下面这样

--select sum(WR_WEIGHT) from TBL_WATER_RECORD where WR_GUN_NUMBER in(

-- select from dbof_splitst(

-- select WC_GUN_NUM from TBL_WATERCAN where WC_WATERCAN_NUM = 1,',')

--)

--本来到这里就结束了,但是这里引发了另外一个问题,上面这句在f_splitst函数中直接使用子查询,

--貌似有查询优先级的问题,它没有先查询出结果

--而是把这句子查询做为一个参数传入了f_splitst,所以行不通

--那么就使用参数结构吧,最后就变成这样了

declare @gun_num as varchar(1000)

select @gun_num=WC_GUN_NUM from TBL_WATERCAN where WC_WATERCAN_NUM= 1

select sum(WR_WEIGHT) from TBL_WATER_RECORD where WR_GUN_NUMBER in(

select from dbof_splitstr(@gun_num,',')

)

--说真的,这次我被恶心了一次,感觉这不是最优的解决办法吧,但是勉强能用吧,不想伤神了

1:可以利用CHARINDEX(或者 PATINDEX) 函数返回字符或者字符串在另一个字符串中的起始位置。 SELECT CHARINDEX('ad','rrdadgff') 返回4; 2:可以利用like进行模糊查询, like ‘%字符串%’ 3:利用全文索引

CHARINDEX ( expression1 , expression2 , [ start_location ] )

如果没有最后一个参数,那么找到的是第一个;

如果要找第二个,那么要从第一个后面的位置开始查找;

如果要查找全部,则需要使用循环语句。

patindex函数支持使用通配符,能够用在很多有变化的查找中。而charindex不能够

比如

patindex(%[a,z,0-9]%[a,z,0-9]%[a,z,0-9]%,xyzabc123)

以上就是关于关于SQLSERVER中 SUM() CHARINDEX() 等的现实案例问题,求帮助全部的内容,包括:关于SQLSERVER中 SUM() CHARINDEX() 等的现实案例问题,求帮助、如何用sql语句,判断数据库中某字段的内容,包含于某字符串、Sql 中 CHARINDEX 包含多个或关系的字符串等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9738782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存