首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>数据库>SQL数据库>SQL2005利用xml在指定分隔符的情况下获取指定数据项的指定位置的串
SQL2005利用xml在指定分隔符的情况下获取指定数据项的指定位置的串
来源: 发布时间:2008-11-21 发布人: 浏览: 人次   字体: [ ]  

  运行环境:
SELECT @@version

/*

-------------------------------------------------
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

  数据准备

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
/*

col
--------------------------------------------------

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很有意思呀!!


相 关 文 章   发布商链接
·如果SQL Server2000安装失败了该怎么...
·为什么安装SQL Server软件会要求关闭...
·如何安装Analysis Services?
·如何知道计算机运行的各种实例的安装...
·如何知道本机安装了多少个SQL实例?
·用sql语句写的递归函数一例
·SQL数据库如何存储层级数据实现无限...
·sql语句写行转列的代码遇到无法处理...
·浅谈sql2008新增的四个有关日期时间...
·在win2003安装Sql2005提示登录失败的...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·SQL数据库实现用SQL语句根据...
·SqlServer 2005 Express的配...
·sql排序规则的简介及其修改操
·如何用sql语句为字段添加和去
·sqlserver数据库日志文件压缩
·sql语句获得数据库某表字段的
·ISNUMERIC函数介绍及其要注意
·SQLServer2005导入xml文件实...
·SQL Server2005中删除表中重...
·如何手工启动SQLServer的全文
·sql删除数据库中的所有表语句
·SqlServr利用触发器来控制某...
·SQLServer常用日期格式转换方
·用sql实现查询重复记录的代码
·SQLServer2005分解导入xml文...
热 门 文 章
·图解SQL2008安装向导的使用
·实现Excel数据导入到SQL2005...
·SQLServer常用日期格式转换方...
·MS sql安装时“无法在COM+目...
·sql语句联合删除多个表技巧
·sql删除数据库中的所有表语句
·Sql Server端口连接的问题
·如何在SQL Server中得到自动...
·sql排序规则的简介及其修改操...
·SQL Server2005中删除表中重...
·分析SQL2005最新高效分页方法
·小解sqlServer中临时表及表变...
·用sql实现查询重复记录的代码
·MS SQL2005无法远程连接问题...
·如何修改sqlserver数据库名称
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .