2013-10-18 44 views
3

我有問題。我的表中有A~B~C~D值。在SQL Server中,我想從'〜'分隔字符串

我想分開這個字符串,如'A'和'B〜C'。

而且我可以使用此功能

SELECT SUBSTRING(Item.Description, 0, CHARINDEX('~', Item.Description)) As Com 

但在此之後分開 'A',我不能分開 'B〜C'。

當然,如果我使用SUBSTRINGCHARINDEX很多,我可以分開。

但它是非常複雜的。

所以我想知道我是否可以使用其他方式。

THX非常多讀

回答

5

這裏是你可以爲了創建一個簡短的SQL函數來分割你的字符串:

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(8000)) 
RETURNS table 
AS 
RETURN (
    WITH splitter_cte AS (
     SELECT CHARINDEX(@sep, @s) as pos, 0 as lastPos 
     UNION ALL 
     SELECT CHARINDEX(@sep, @s, pos + 1), pos 
     FROM splitter_cte 
     WHERE pos > 0 
    ) 
    SELECT SUBSTRING(@s, lastPos + 1, 
        case when pos = 0 then 80000 
        else pos - lastPos -1 end) as chunk 
    FROM splitter_cte 
) 
GO 

這裏是你將如何使用它:

SELECT * FROM dbo.Split('~', 'A~B~C~D') 

OUTPUT:

chunk 
------------- 
A 
B 
C 
D 

瞭解更多關於此sql split function如何工作

1

該方案基於XML:

DECLARE @Source VARCHAR(4000); 
SET @Source = 'A~B~C~D'; 

DECLARE @x XML; 
SET @x = CONVERT(XML, '<item>' + REPLACE(@Source, '~', '</item> <item>') + '</item>'); 
-- result @x = <item>A</item><item>B</item><item>C</item><item>D</item> 

SELECT a.b.value('.', 'NVARCHAR(100)') AS Value 
FROM @x.nodes('/item') a(b); 

結果:

Value 
----- 
A 
B 
C 
D 
相關問題