请问sql怎样处理这个字符串呢?
表中有一列数据类型为:varchar(100),用来存储10个数字,10个数字之间是使用的英文逗号隔开的
假如值为:10,2,300,10,40,50,60,8,300,25
请问如何使用sql语句将第N个数字(第N个数字是任意的不是固定的,但只会是一个不会是多个)的值取出来,并和加到另外一个int类型的列上呢?
假如值为:10,2,300,10,40,50,60,8,300,25
请问如何使用sql语句将第N个数字(第N个数字是任意的不是固定的,但只会是一个不会是多个)的值取出来,并和加到另外一个int类型的列上呢?
作者: chaoup 发布时间: 2011-06-14
upup
作者: chaoup 发布时间: 2011-06-14
你的"加到另一个int类型上"是什么意思呢,我只会把第N个的值找出来:
SQL code
SQL code
declare @col varchar(100) declare @n int set @col='10,2,300,10,40,50,60,8,300,25' set @n=6 select n from( select row_number()over(order by number)rn,n from( select number,substring(@col,number,charindex(',',@col+',',number+1)-number)n from master..spt_values where type='p' and number<=len(@col) and substring(@col,number,1)<>',' and substring(','+@col,number,1)=','-- and number=@n+1 )a )b where rn=@n /* n ---------------------------------------------------------------------------------------------------- 50 (1 行受影响) */
作者: qianjin036a 发布时间: 2011-06-14
SQL code
/* if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetStr]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_GetStr] GO */ /*--得到字符串列表指定位置的字符*/ /*邹建 2004.07(引用请保留此信息)--*/ /*--调用示例 --测试数据 declare @t table(FITEM varchar(100)) insert @t select '100..10.' union all select '20.140.10' union all select '150.124.150.10' --查询 select fitem1=dbo.f_GetStr(fitem,1,'.') ,fitem2=dbo.f_GetStr(fitem,2,'.') ,fitem3=dbo.f_GetStr(fitem,3,'.') ,fitem4=dbo.f_GetStr(fitem,4,'.') ,fitem5=dbo.f_GetStr(fitem,5,'.') ,fitem6=dbo.f_GetStr(fitem,6,'.') from @t --*/ create function [dbo].[f_GetStr] ( @s varchar(8000), @pos int, @split varchar(10) ) returns varchar(100) as begin if @s is null return(null) declare @splitlen int select @splitlen=len(@split+'a')-2 while @pos>1 and charindex(@split,@s+@split)>0 select @pos=@pos-1,@s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'') return (isnull(left(@s,charindex(@split,@s+@split)-1),'')) end declare @i varchar(100) set @i='10,2,300,10,40,50,60,8,300,25' select dbo.[f_GetStr](@i,4,',') /* 10 */
作者: maco_wang 发布时间: 2011-06-14
SQL code
--轉老大 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetStr]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_GetStr] GO --分段截取函数 CREATE FUNCTION dbo.f_GetStr( @s varchar(8000), --包含多个数据项的字符串 @pos int, --要获取的数据项的位置 @split varchar(10) --数据分隔符 )RETURNS varchar(100) AS BEGIN IF @s IS NULL RETURN(NULL) DECLARE @splitlen int SELECT @splitlen=LEN(@split+'a')-2 WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0 SELECT @pos=@pos-1, @s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'') RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),'')) END GO select dbo.f_GetStr('2∮11∮10∮09∮10∮13∮786∮91.93∮69∮100.00 ',7,'∮') /* ---------------------------------------------------------------------------------------------------- 786 (1 個資料列受到影響)
作者: fredrickhu 发布时间: 2011-06-14