--加一个分隔函数:
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
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
解决方案 »
- 【讨论】生成上班时间9:00到18:00之间的一个随机事件
- 谁来帮我解释一下ERP中的BOM是什么,如何用法,数据库如何实现
- MsSqlServer 能否在事先指定的时间做某项工作,类似于windows的计划任务?
- Windows 无法启动 SQL Server (MSSQLSERVER) 服务(位于 本地计算机 上)。错误 1067: 进程意外终止
- 问几个关于sqlserver分区的问题
- 请问有什么软件在客户端直接操作SQL server, 不用写代码.
- SQL生成进销存预计报表
- 远程数据库插入问题?
- 关于用存储过程返回结果集
- bde如何自动配置而不用手工配置 ,急呀!!!在线等,送高分
- 关于SQLServer2000的服务问题,求解!
- 我的sql2000服务器不能启动
--没测试效率,试看看:
create function [dbo].[R_GetAnswerPos] (@num int,@CJ varchar(1000))
returns varchar(10)
begin
declare @i int,@return varchar(100)
set @i=0
if(len(@cj)-len(replace(@cj,',',''))<@num)
set @return=null
else
begin
while(charindex(',',@cj)>0)
begin
if(@i=@num-1)
begin
set @return=left(@cj,charindex(',',@cj)-1)
break;
end
else
begin
set @i=@i+1
set @Cj=right(@cj,len(@cj)-charindex(',',@cj))
end
end
end
return @return
end
goselect [dbo].[R_GetAnswerPos] (5,'aasdf,c,saf,es,fe,s,sasd,x')
create function getindexstr(@s varchar(8000),@n int)
--@s 需要查找的字符串,@n 查找的个数。
returns varchar(8000)
as
begin
declare @rs varchar(8000),@i int,@j
select @i = 1,@s = @s+',',@j = 1
while charindex(',',@s,@i)>0 and @j<=@n
select @j = @j + 1,@i = charindex(',',@s,@i)+1
if @j < @n or len(@s)<@i return ''
return substring(@s,@i,charindex(',',@s,@i)-@i)
end
你的方法和我写的函数查询时间差不多
create function getindexstr(@s varchar(8000),@n int)
--@s 需要查找的字符串,@n 查找的个数。
returns varchar(8000)
as
begin
declare @rs varchar(8000),@i int,@j int
select @i = 1,@s = @s+',',@j = 1
while charindex(',',@s,@i)>0 and @j<@n
select @j = @j + 1,@i = charindex(',',@s,@i)+1
if @j < @n or len(@s)<@i return ''
return substring(@s,@i,charindex(',',@s,@i)-@i)
end
INSERT @t SELECT 'a,b,c,d,e'
UNION ALL SELECT 'a,,b,dd,c'SELECT v,CAST('<item value=''' + REPLACE(v,',','''/><item value=''') + '''/>' AS XML).value('(/item/@value)[4]','varchar(10)') FROM @t/*
a,b,c,d,e d
a,,b,dd,c dd*/