首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于sqlserver 2005数据库查询对字段切割的有关问题

2012-07-23 
关于sqlserver 2005数据库查询对字段切割的问题有一个字段,保存的数据格式如下 11111\22222\33333\44反斜

关于sqlserver 2005数据库查询对字段切割的问题
有一个字段,保存的数据格式如下 11111\22222\33333\44
反斜杠数目不一定, 希望得到结果:

Field1 Field2 Field3 Field4 ....

11111 22222 33333 44 ....

请高手赐教

[解决办法]

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)ASBEGIN    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),''))ENDGOselect dbo.f_GetStr('2∮11∮10∮09∮10∮13∮786∮91.93∮69∮100.00 ',7,'∮')/*----------------------------------------------------------------786(1 個資料列受到影響)
[解决办法]
SQL code
DECLARE @value VARCHAR(1000)DECLARE @sql VARCHAR(1000)DECLARE @int INT SET @sql = ''SET @int = 1SET @value = '11111\22222\33333\44'WHILE CHARINDEX('\',@value) > 0BEGIN    SELECT @value = STUFF(@value,CHARINDEX('\',@value),1,' AS Field' + RTRIM(@int) + ', '),@int = @int + 1ENDSET @sql = 'SELECT ' + @value + ' AS Field' + RTRIM(@int)EXEC (@sql)Field1    Field2    Field3    Field411111    22222    33333    44 

热点排行
Bad Request.