常用自定义函数进行分割的方式

目标:select * from[dbo].[splitstr]('01,02,03',',')

返回结果 表

 01

 02

 03

自定义函数

 CREATE function [dbo].[splitstr](@SourceSql varchar(8000),@StrSeprate varchar(5))
returns @temp table(TID varchar(2000))  
as  
begin  
    declare @i int  
    set @SourceSql=rtrim(ltrim(@SourceSql))  
    set @i=charindex(@StrSeprate,@SourceSql)  
    while @i>=1  
    begin  
        insert @temp values(left(@SourceSql,@i-1))  
        set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)  
        set @i=charindex(@StrSeprate,@SourceSql)  
    end  
    if @SourceSql<>'' insert @temp values(@SourceSql)  

——————————————————————————————————————————————————————————————

SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串

自定义取出第几个分割字符前的字符串,默认位置(0)

格式:dbo.split(字段名,'分隔字符',取出的第几个字符串)

如果没有分隔的字符,则返回整个字符串。

如果取出的位置字符串的位置超出Index则返回空。

CREATE FUNCTION [dbo].[split]

 (@str nvarchar(4000),@code varchar(10),@no int )  

RETURNS varchar(200)

AS  

BEGIN

declare @intLen int

declare @count int

declare @indexb   int

declare @indexe   int

set @intLen=len(@code)

set @count=0

set @indexb=1

if @no=0

   if charindex(@code,@str,@indexb)<>0

      return left(@str,charindex(@code,@str,@indexb)-1)

   else

      return @str

while charindex(@code,@str,@indexb)<>0

   begin

        set @count=@count+1

        if @count=@no

          break

        set @indexb=@intLen+charindex(@code,@str,@indexb)

   end

if @count=@no

   begin

       set @indexe=@intLen+charindex(@code,@str,@indexb)

           if charindex(@code,@str,@indexe)<>0

              return substring(@str,charindex(@code,@str,@indexb)+len(@code),charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code))

           else

              return right(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1)

   end

return ''

END



    return  
end  

————————————————————————————————————————————————————————————————

将IDS分割后并转化为对应的字符

  1. --将档案IDS的字符串转换成名字的字符串  
  2. ALTER FUNCTION GetArchivesNameStr(@SourceSql nvarchar(500),@StrSeprate nvarchar(10))    --字符串格式41,56,77,  
  3. RETURNS nvarchar(500)  
  4. AS  
  5. begin  
  6.     declare @names nvarchar(500)  
  7.     declare @i int  
  8.     set @names='' 
  9.     set @SourceSql=rtrim(ltrim(@SourceSql))  
  10.     set @i=charindex(@StrSeprate,@SourceSql)  
  11.     while @i>=1  
  12.     begin          
  13.         set @names=@names+(select name from Archives where ArchivesID=convert(int,left(@SourceSql,@i-1)))+','  
  14.         set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)  --已经转换好的去掉  
  15.         set @i=charindex(@StrSeprate,@SourceSql)       --重新定位  
  16.     end      
  17.     --return @names  
  18.     if @SourceSql<>''and @i>=1   --最后一个  
  19.     begin  
  20.          set @names=@names+(select name from Archives where ArchivesID=convert(int,left(@SourceSql,@i-1)))  
  21.     end  
  22.   if(right(@names,1)=',') --去掉后面的逗号  
  23.         set @names=substring(@names,1,len(@names)-1)   
  24.  
  25.     return @names  
  26. end  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值