SQL 分段截取函数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值