none
請問使用split方法,對象是text型態? RRS feed

  • 問題

  • 各位前輩好!

    小弟有參考Lolota Lee得一篇解決方法如下:

    //================================================

    create function Split (
    @StringToSplit varchar(2048),
    @Separator varchar(128))
    returns table as return
    with indices as
    (
    select 0 S, 1 E
    union all
    select E, charindex(@Separator, @StringToSplit, E) + len(@Separator)
    from indices
    where E > S
    )
    select substring(@StringToSplit,S,
    case when E > len(@Separator) then e-s-len(@Separator) else len(@StringToSplit) - s + 1 end) String
    ,S StartIndex       
    from indices where S >0


    然後用下列方式取
    select  String, COUNT(string)as 次數  from Split('aaa,b,cccc,b,dd,e,ffff,g' , ',') group by string

    //================================================================

    可是對象如果是text的行態欄位,不知道要如何放入??

    因為我的長度很長.....

     

    2011年3月2日 下午 03:32

解答

  • 參考http://mydiamond.pixnet.net/blog/post/22415645網站後,

    在將程式改成如下,就可以了...

    CREATE FUNCTION [dbo].[ufn_SplitToTable]
    ( @InputString varchar(max) ,
      @Separator varchar(1)
    )
    RETURNS
    @tblReturn TABLE (COL1 varchar(max))
    AS
    BEGIN  
    DECLARE @CIndex smallint  
    WHILE (@InputString<>'')
    BEGIN
    SET @CIndex=CHARINDEX(@Separator,@InputString)
    IF @CIndex=0 SET @CIndex=LEN(@InputString)+1
        
    --透過substring函數取得第一個字串,並輸入資料表變數中
          
    INSERT INTO @tblReturn (COL1) 
         
    VALUES (SUBSTRING(@InputString,1,@CIndex-1))
         
    IF @CIndex=LEN(@InputString)+1 BREAK
          
    SET @InputString=SUBSTRING(@InputString,@CIndex+1,LEN(@InputString)-@CIndex)
      
    END
     
    RETURN
    END

    • 已標示為解答 bradsheng 2011年3月4日 上午 02:45
    2011年3月3日 上午 06:31

所有回覆

  • 參考http://mydiamond.pixnet.net/blog/post/22415645網站後,

    在將程式改成如下,就可以了...

    CREATE FUNCTION [dbo].[ufn_SplitToTable]
    ( @InputString varchar(max) ,
      @Separator varchar(1)
    )
    RETURNS
    @tblReturn TABLE (COL1 varchar(max))
    AS
    BEGIN  
    DECLARE @CIndex smallint  
    WHILE (@InputString<>'')
    BEGIN
    SET @CIndex=CHARINDEX(@Separator,@InputString)
    IF @CIndex=0 SET @CIndex=LEN(@InputString)+1
        
    --透過substring函數取得第一個字串,並輸入資料表變數中
          
    INSERT INTO @tblReturn (COL1) 
         
    VALUES (SUBSTRING(@InputString,1,@CIndex-1))
         
    IF @CIndex=LEN(@InputString)+1 BREAK
          
    SET @InputString=SUBSTRING(@InputString,@CIndex+1,LEN(@InputString)-@CIndex)
      
    END
     
    RETURN
    END

    • 已標示為解答 bradsheng 2011年3月4日 上午 02:45
    2011年3月3日 上午 06:31
  • Try to change to

    create function Split (
    @StringToSplit varchar(max),
    ...
    ...
    ...


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年3月3日 上午 06:35