<pre name="code" class="sql">--分段截取函数
create function [dbo].[NuString](@str varchar(max),@n int)
returns varchar(max)
as
begin
declare @s varchar(max),@re varchar(max),@i int
set @s=@str+','
set @i=1
if(@n<@i or charindex(',',@str)=0)
return @str
while @i<@n
begin
set @re=stuff(@s,1,charindex(',',@s),'')
if(@re='')
break
set @s=@re
select @i=@i+1
end
return substring(@s,1,charindex(',',@s)-1)
end
/*--调用
select dbo.NuString('12,345,6783456',1) --输出 12
select dbo.NuString('12,345,6783456',2) --输出 345
select dbo.NuString('12,345,6783456',3) --输出 6783456
-- 如需按其他符号来分割,则将函数中的符号替换过来即可,或是多加一个参数,函数中的符号由参数代替
*/
---保留整数(前面还发帖提问了,借鉴大神写的)
create function [dbo].[funre](@str varchar(max))
returns varchar(max)
as
begin
declare @s varchar(max),
@re varchar(max),
@va varchar(200)
set @s=@str+','
while charindex(',',@s)!=0
begin
set @va=substring(@s,1,charindex(',',@s)-1)
if(Convert(decimal(18,1),@va)%1=0)
set @re=isnull(@re,'')+@va+','
set @s=stuff(@s,1,charindex(',',@s),'')
end
return substring(@re,1,len(@re)-1)
end
/* 调用
select dbo.funre('1,3.45,656') --输出 1,656
select dbo.funre('1,3.45,65.6') --输出 1
*/
-- 作用描述: 分割一组数据
-- 适用范围:
-- 调用方法:SELECT * FROM dbo.Split('待分割的数据','分隔符')
-- =============================================
CREATE FUNCTION SPLIT
(
@Array VARCHAR(7000) --待分割的数据
,@Split CHAR(1) --分隔符
)
RETURNS @T TABLE(v VARCHAR(100))
AS
BEGIN
WHILE(CHARINDEX(@Split,@Array)<>0)
BEGIN
INSERT @T VALUES(SUBSTRING(@Array,1,CHARINDEX(@Split,@Array)-1));
SET @Array=STUFF(@Array,1,CHARINDEX(@Split,@Array),'');
END
INSERT @T VALUES(@Array);
RETURN;
END;