2011-03-04 38 views
0

首先非常感謝網站創建者,並且最重要的是幫助這個網站上的古茹。拆分字符串並返回多列數據

我從外地相同的問題分割字符串,並以多列例如顯示它在我的表已經得到了三列 dbo.tests

Fname ID wTest      Loc 
ABC 1 "XYZ,PTO,LKMD,HGGFFD," R1 
BCE 2 "PTO,XYZ,LKMD,,"   R1 
LKJ 3 "XYZ"      R3 
JKL 4 "XYZ,PTO,LKMD,HGGFFD,PKL" R2 

SELECT語句如下應顯示數據的輸出:。(動態生成基於從W測試字符串所需的最大列數列的數量,並與空或某個值填充空columsn

返回:

Fname ID Loc wTest wTest1 wTest2,wTest3,Wtest4... 
ABC 1 R1 XYZ PTO LKMD HGGFFD Null 
BCE 2 R1 PTO XYZ LKMD Null Null 
LKJ 3 R3 XYZ Null Null Null Null      
JKL 4 R2 XYZ PTO LKMD HGGFFD PKL 

兩個我就翻過關閉功能如下:

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512)) 
RETURNS table AS RETURN 

(  
WITH Pieces (pn, start, stop) AS 
( 
SELECT 1, 1, CHARINDEX(@sep, @s)  
UNION ALL  
SELECT pn + 1, stop + 1, 
CHARINDEX(@sep, @s, stop + 1)  
FROM Pieces  
WHERE stop > 0 )  

SELECT pn, SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s  FROM Pieces ) 




with testTable AS 
( SELECT 1 AS Id, N'how now brown cow' AS txt 
UNION ALL 
SELECT 2, N'she sells sea shells upon the sea shore' UNION ALL 
SELECT 3, N'red lorry yellow lorry' UNION ALL 
SELECT 4, N'the quick brown fox jumped over the lazy dog' )  

SELECT display_term, COUNT(*) As Cnt 
FROM testTable CROSS APPLY sys.dm_fts_parser('"' + txt + '"', 1033, 0,0) 
GROUP BY display_term 
HAVING COUNT(*) > 1 ORDER BY Cnt DESC 

在這方面的任何幫助,高度讚賞。

扎因... [email protected]

回答

0

有人建議這一點,但我申請我的目的有困難....

Returns @Tbl_IDs 
    Table (Id int identity(1,1), 
    Data Varchar(500)) As 
    Begin 
    --Remove the leading delimiter if any 
    while (substring(@IDs,1,1) [email protected]) 
    set @IDs = substring(@IDs, 2,len(@IDs)-1) 

    -- Append comma 
    --Set @IDs = @IDs + @Delimiter 
    set @IDs = REPLACE(RTRIM(LTRIM(REPLACE(@IDs,@Delimiter,' '))),' ',@Delimiter) 


    -- Indexes to keep the position of searching 
    Declare @Pos1 Int 
    Declare @pos2 Int 
    Declare @RowNum Int 

    -- Start from first character 
    Set @Pos1=1 
    Set @Pos2=1 
    While @Pos1>0 
    Begin 
    Set @Pos1 = CharIndex(@Delimiter,@IDs,@Pos1) 
    Insert @Tbl_IDs Values (Substring(@IDs,@Pos2,@[email protected])) 
    -- Go to next non comma character 
    Set @[email protected]+1 
    -- Search from the next charcater 
    Set @Pos1 = @Pos1+1 
    End 
    Return 
    End 
0

另外一個我遇到相當有趣而簡單但不知道如何在我的選擇聲明中使用:

DECLARE @NextString NVARCHAR(40) 
DECLARE @Pos INT 
DECLARE @NextPos INT 
DECLARE @String NVARCHAR(40) 
DECLARE @Delimiter NVARCHAR(40) 

SET @String ='SQL,TUTORIALS,,TCF' 
SET @Delimiter = ',' 
SET @String = @String + @Delimiter 
SET @Pos = charindex(@Delimiter,@String) 

WHILE (@pos <> 0) 
BEGIN 
SET @NextString = substring(@String,1,@Pos - 1) 
SELECT @NextString -- Show Results 
SET @String = substring(@String,@pos+1,len(@String)) 
SET @pos = charindex(@Delimiter,@String) 
END 
相關問題