问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql以逗号分隔的字符串查询每个字符出现的个数

发布网友 发布时间:2022-04-07 18:33

我来回答

2个回答

懂视网 时间:2022-04-07 22:55

1 tiny,small,big 2 small,medium 3 tiny,big 期望得到结果: ID Value 1 tiny 1 small 1 big 2 small 2 medium 3 tiny 3 big 正文:   www.2cto.com   #需要处理的表 create table tbl_name (ID int ,mSize varchar(100)); insert into tbl_name values (1,‘tiny,small,big‘); insert into tbl_name values (2,‘small,medium‘); insert into tbl_name values (3,‘tiny,big‘);   #用于循环的自增表 create table incre_table (AutoIncreID int); insert into incre_table values (1); insert into incre_table values (2); insert into incre_table values (3);   select a.ID,substring_index(substring_index(a.mSize,‘,‘,b.AutoIncreID),‘,‘,-1)  from  tbl_name a join incre_table b on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,‘,‘,‘‘))+1) order by a.ID;   原理分析: 这个join最基本原理是笛卡尔积。通过这个方式来实现循环。 以下是具体问题分析: length(a.Size) - length(replace(a.mSize,‘,‘,‘‘))+1  表示了,按照逗号分割后,改列拥有的数值数量,下面简称n join过程的伪代码: 根据ID进行循环 { 判断:i 是否 <= n { 获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.mSize,‘,‘,b.ID),‘,‘,-1) i = i +1  } ID = ID +1  }  www.2cto.com     总结: 这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。 例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。 当然,mysql内部也有现成的连续数列表可用。如mysql.help_topic: help_topic_id 共有504个数值,一般能满足于大部分需求了。 改写后如下:   select a.ID,substring_index(substring_index(a.mSize,‘,‘,b.help_topic_id+1),‘,‘,-1)  from  tbl_name a join mysql.help_topic b on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,‘,‘,‘‘))+1) order by a.ID;       ========================================================================= 问题:  
有个表中的一个字段Author,如下
ID Author
1 张三
2 张三,李四
3 王五
4 李四
5 张三,李四,王五

现在想查询出这样的结果
Author Count
张三 3
李四 3
王五 2


sql server 解答:
if object_id(‘Tempdb..#Num‘) is not null 
drop table #Num
select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
Select
Author=substring(a.Author,b.ID,charindex(‘,‘,a.Author+‘,‘,b.ID)-b.ID),count(*)
from
table1 a,#Num b
where
charindex(‘,‘,‘,‘+a.Author,b.ID)=b.ID
group by substring(a.Author,b.ID,charindex(‘,‘,a.Author+‘,‘,b.ID)-b.ID);

table1替换成你自己表名,top 100 那个100你就替换个稍微大点的数吧

SQL逗号分隔的字段统计(摘自网络)

标签:

热心网友 时间:2022-04-07 20:03

sql中可以自定义函数来统计逗号隔开的字符串的数量:
参考如下:
drop function search_dh
go
CREATE FUNCTION search_dh(@str varchar(max))
returns int--设置返回值是returns
AS
BEGIN
DECLARE @result int --返回逗号个数
declare @j int
set @result = 0
set @j = 1
while @j<len(@str)
begin
if substring(@str,@j,1) = ',' --@j是开始位置,1位置参数是长度值
begin
set @result = @result+1
end
set @j = @j+1 --如果出现无限循环请检查参数是否加1以及位置问题
end
return @result --返回结果
END
用法:
select dbo.search_dh ('a,b,c') --引用自定义函数时需要加上dbo.前缀
SELECT x = SUBSTRING('abcdef',2, 2)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 法国留学怎么样,有什么好的推荐吗? 法国留学有什么好学校吗 法国留学哪个学校好 我想到法国留学,想加强法语,哪个法语培训学校比较好啊? 有没有在法国留学或者知道哪些学校好的帮帮忙介绍下这几所学校 去国外留学初期会有什么不适应?大概需要多久? 法国留学用,卡西欧EW-V4000L,快易典法语王fa329哪个更好? 现在加盟什么店比较赚钱? 要去法国留学,要买一台笔记本,帮忙推荐下 那个19多少来着卖酒的加盟, 要去法国留学用什么牌子的笔记本比较好 谁知道酒吧的由来吗? 要去法国留学了,想买一台笔记本电脑,但是不知道应该买什麽牌子的,求意见 我想开家卖酒的店,但不知道来货价格,也不知道卖什么样酒的利润大一点,希望有人帮我决绝这个问题! 加盟酱香酒赚钱吗,懂行的说下? 写了一幅《心经》祭奠我的外祖父,可以吗 酒号巴士加盟怎么样 父辈都不在了,孙子就不能给爷爷上坟了吗? 怎么祭奠过世的爷爷奶奶 加盟酒德利新店商开实体店卖酒,不用交房租是真的假的?请人工还不用花钱吗? 问道推广员积分是怎么算 手机蓝牙连接车载导航光有声音无路况图像? 夏新移动音响蓝牙连接成功但没图像? 汽车连手机蓝牙导航没有图像处理怎么办?手机是小米4蓝牙连接成功,打开手机高德地图导航,车语音正常 为什么蓝牙配对成功点了自动连接,但什么反应也没有 改革开放以来的变化 具体分为哪些方面的? 我手机连接了蓝牙 可是在我的电脑里面没有图像 蓝牙连接手机以后 为什么手机放歌 车上没有反应 请教茶术高手!普洱茶饼的保存方法 华为手机怎么解除密码? 为啥自热米饭里的米熟的这么快? 无反能完全取代单反吗 尼康和佳能好像没有再推出单反相机了,单电相机将要取代单反相机了吧? 数码相机发展趋势是什么? 傻儿传奇2唐文遵扮演者是谁死了吗结局怎么死的 你认为数码单反相机会像今天的DC一样普及吗? 全画幅单电相机将取代传统的单反相机吗?老单反是走向收藏还是攻击中画幅? 东地天澜交通方便吗?应该怎么过去? 联想yoga710 怎么关闭触摸屏呀? 联想yoga71014ikb触摸板怎么关闭