永发信息网

用SQL语句例如:id1,23,43,12,4,6.。。。字段中的每个值都是用逗号隔开的,请问怎样把每个id的值取出来

答案:2  悬赏:40  手机版
解决时间 2021-02-10 18:09
表table有字段为id。例如:id1,23,43,12,4,6.。。。字段中的每个值都是用逗号隔开的,请问怎样把每个id的值取出来呢?即得到值1 23 43.。。。。
最佳答案
你创建下面这个函数,可以实现这个功能

CREATE FUNCTION uf_StrSplit
(@origStr varchar(7000), --待拆分的字符串
@markStr varchar(100)) --拆分标记,如','
RETURNS @splittable table
(
str_id varchar(4000) NOT NULL, --编号ID
string varchar(2000) NOT NULL --拆分后的字符串
)
AS
BEGIN
declare @strlen int,@postion int,@start int,@sublen int,@TEMPstr varchar(200),@TEMPid int
SELECT @strlen=LEN(@origStr),@start=1,@sublen=0,@postion=1,@TEMPstr='',@TEMPid=0

if(RIGHt(@origStr,1)<>@markStr )
begin
set @origStr = @origStr + @markStr
end
WHILE((@postion<=@strlen) and (@postion !=0))
BEGIN
IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
BEGIN
SET @sublen=CHARINDEX(@markStr,@origStr,@postion)-@postion;
END
ELSE
BEGIN
SET @sublen=@strlen-@postion+1;

END
IF(@postion<=@strlen)
BEGIN
SET @TEMPid=@TEMPid+1;
SET @TEMPstr=SUBSTRINg(@origStr,@postion,@sublen);
INSERT INTO @splittable(str_id,string) values(@TEMPid,@TEMPstr)
IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
BEGIN
SET @postion=CHARINDEX(@markStr,@origStr,@postion)+1
END
ELSE
BEGIN
SET @postion=@postion+1
END
END
END
RETURN
END
全部回答
你好! 试试下面这个,好了就用,用不了我给你说 打字不易,采纳哦!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
稳定塘是如何分类的?有哪些类型?各有什么特
视界眼镜这个地址在什么地方,我要处理点事
关于化学的小故事不管是名人的故事,还是生活
聚雅轩酒楼在什么地方啊,我要过去处理事情
观察天气变化情况写一篇日记20个字
图是“有关工厂设施与其所造成的环境污染示意
乘出租车的英文!拜托求解
雨泽酒行地址在什么地方,想过去办事
城镇生小孩报销多少钱
壤去了土子旁,换成马念什么
忠仁村地址在哪,我要去那里办事
虎年的孩子姓付裕字辈怎么取名
丰田汽车100型油耗
求山东省日照市莒县三中期末考试卷初一真卷
集贤村怎么去啊,我要去那办事
推荐资讯
中国福利彩票(第45041821站)在哪里啊,我有事
如何在ppt插入mp3做背景音乐
【翻译咏雪】咏雪 翻译
社茶场地址在哪,我要去那里办事
大便拉不出来,到了医院有什么解决办法
在抗震烈度6、7度设防地区,砖砌体留直槎时,
想个成语,四个字,最后一个为“虎”字
康婷瑞倪维儿全国连锁机构地址好找么,我有些
碳酸氢钾加热会分解吗
请问vivo手机可用其他安卓手机的充电器么有损
久余进口石材这个地址在什么地方,我要处理点
【造福桑梓】造福桑梓中的“桑梓”是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?