zoukankan      html  css  js  c++  java
  • sql处理带分隔符的字符串数据

    --獲取被分隔符分割開來的字符串中參數的個數

    CREATE function GetStrArrayLength
    (
     
    @str varchar(1024),  --要分割的字符串
     @split varchar(10)  --分隔符号
    )
    returns int
    as
    begin
     
    declare @location int
     
    declare @start int
     
    declare @length int

     
    set @str=ltrim(rtrim(@str))--剔除字符串的首尾空格

     
    set @location=charindex(@split,@str)--第一個分隔符在字符串中的索引數字  例如'a1,b2,c3,d4'中第一個','的位置索引

     
    set @length=1--字符串被分隔符分割開來的參數個數,這裡初始化為一個

     
    while @location<>0 --如果字符串中還存在分隔符那麼該分隔符在字符串中的索引就不會為0,也就是不等於0
     begin
       
    set @start=@location+1 --從第一個分隔符索引位置後的字符串中開始檢索,檢索的起始是第一個分隔符後的一位開始
       set @location=charindex(@split,@str,@start)
       
    set @length=@length+1
     
    end
     
    return @length
    end
    ---------------------------------------

    --获得带分隔符的字符串中指定索引对应的间隔项
    creat FUNCTION dbo.f_GetStr(
        
    @s varchar(8000),      --包含多个数据项的字符串
        @pos int,             --要获取的数据项的位置
        @split varchar(10)     --数据分隔符
    )RETURNS varchar(1000)
    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(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
    END

     

    --------------------------------------------------------------

    获得指定索引对应的间隔开来的单项字符数据

    create function GetStr
    (
     
    @str varchar(1024),  --要分割的字符串
     @split varchar(10),  --分隔符号
     @index int --取第几个元素
    )
    returns varchar(1024)
    as
    begin
     
    declare @location int
     
    declare @start int
     
    declare @next int
     
    declare @seed int

     
    set @str=ltrim(rtrim(@str))
     
    set @start=1
     
    set @next=1
     
    set @seed=len(@split)
     
     
    set @location=charindex(@split,@str)
     
    while @location<>0 and @index>@next
     
    begin
       
    set @start=@location+@seed
       
    set @location=charindex(@split,@str,@start)
       
    set @next=@next+1
     
    end
     
    if @location =0 select @location =len(@str)+1  
     
    return substring(@str,@start,@location-@start)
    end


     
  • 相关阅读:
    (转)单机上配置hadoop
    整数划分 Integer Partition(二)
    整数划分 Integer Partition(一)
    深入理解计算机系统:信息的处理和表示(二)整数四则运算
    深入理解计算机系统:信息的处理与表示(一)基础
    从《营造法式》为何成书于北宋 谈起
    (转)排列算法 Permutation Generation
    洛谷2971 [USACO10HOL]牛的政治Cow Politics
    洛谷1549 棋盘问题(2)
    洛谷3084 [USACO13OPEN]照片Photo
  • 原文地址:https://www.cnblogs.com/huashanlin/p/2028597.html
Copyright © 2011-2022 走看看