当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > XML与XHTML教程 > 正文 |
|
|||
利用xml在指定分隔符的情况下获取指定数据项的指定位置的串 | |||
2010-1-12 9:04:49 文/佚名 出处:电脑软硬件应用网 | |||
-- 运行环境:
------------------------------------------------- Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) Apr 14 2006 01:12:25 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
(1 行受影响) */
create function F_split( @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(nullif(left(@s,charindex(@split,@s+@split)-1),'')) END GO
INSERT @t VALUES('10/20/30/50/40/90') INSERT @t VALUES('1/2/3/5/4/9') INSERT @t VALUES('10/5/60/33/12/1') INSERT @t VALUES('10/8/3/60/55/20') select dbo.F_split(data,3,'/') as col from @t
-------------------------------------------------- 30 3 60 3
(4 行受影响) */
drop function F_split; GO -- 下面我们来试试用xml的语法完成上面的功能。
create function F_split( @s varchar(8000), --包含多个数据项的字符串 @pos int, --要获取的数据项的位置 @split varchar(10) --数据分隔符 )RETURNS VARCHAR(100) AS BEGIN DECLARE @RET VARCHAR(100) SELECT @RET = CAST(('<root><v>'+ REPLACE(@s,@split,'</v><v>')+'</v></root>' ) AS xml). query('//v[position()=sql:variable("@pos")]'). value('.[1]','VARCHAR(max)') return @ret END GO
-- 数据准备 DECLARE @t TABLE(data varchar(50)) INSERT @t VALUES('10/20/30/50/40/90') INSERT @t VALUES('1/2/3/5/4/9') INSERT @t VALUES('10/5/60/33/12/1') INSERT @t VALUES('10/8/3/60/55/20') select dbo.F_split(data,3,'/') as col from @t DROP FUNcTION F_split /* col ------------------------------ 30 3 60 3
(4 行受影响) */ -- 对比两个函数,大家看看是不是XML很有意思呀!! |
|||
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |