2017-11-10 5 views
0

私はSQLクエリ、 に私は次のクエリを試みたが、それが唯一の3列 を与え、私は8列SQLクエリで文字列から値をカンマで区切って選択する方法は?

SELECT 
    LEFT(DB_field, CHARINDEX(',', DB_field)-1) as '1st column', 
    SUBSTRING(DB_field, CHARINDEX(',', DB_field)+1, LEN(DB_field)-CHARINDEX(',', DB_field)-CHARINDEX(',',REVERSE(DB_field))) as '2nd column', 
    RIGHT(DB_field, CHARINDEX(',', REVERSE(DB_field))-1) as '3rd column' 
FROM Table_Name 

ようにしたいDB_fieldている(、)カンマで区切られた文字列から値を選択します文字列の値はカンマ(、)で区切ります123,456,789、abcd、efghjk、lmno、pqrs、tuvw SQLクエリでその文字列からその値を選択するにはどうすればよいですか?

誰もがあなたがのSQL Server 2014または以下を使用している場合は、カスタム関数を作成し

+7

[カンマ区切りの値を列に分割する方法](https://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to-columns)の可能な複製) – Valerica

+0

この質問は多く、何度も何度も聞かれました。お気に入りの検索エンジンを使用してください。 – HoneyBadger

答えて

1

を使用することができるXMLベースのソリューション:

;WITH cte AS (
    SELECT * 
    FROM (VALUES 
    (N'123,456,789,abcd,efghjk,lmno,pqrs,tuvw'), 
    (N'987,654,321,dbca,kjhgfe,onml,srqp,xyz') 
    ) as t(DB_field) 
) 

SELECT t.c.value('/a[1]','nvarchar(max)') as [1column], 
     t.c.value('/a[2]','nvarchar(max)') as [2column], 
     t.c.value('/a[3]','nvarchar(max)') as [3column], 
     t.c.value('/a[4]','nvarchar(max)') as [4column], 
     t.c.value('/a[5]','nvarchar(max)') as [5column], 
     t.c.value('/a[6]','nvarchar(max)') as [6column], 
     t.c.value('/a[7]','nvarchar(max)') as [7column], 
     t.c.value('/a[8]','nvarchar(max)') as [8column], 
     t.c.value('/a[9]','nvarchar(max)') as [9column] 
FROM (
    SELECT CAST(('<a>'+REPLACE(DB_field,',','</a><a>') +'</a>') as xml) as x 
    FROM cte c 
) as xt 
CROSS APPLY xt.x.nodes('/') as t(c) 

出力:

1column 2column 3column 4column 5column 6column 7column 8column 9column 
123  456  789  abcd efghjk lmno pqrs tuvw NULL 
987  654  321  dbca kjhgfe onml srqp xyz  NULL 
+0

ありがとうgofr1 –

0

に私を助けることができるしてください。

CREATE FUNCTION SplitString 
( 
     @Input NVARCHAR(MAX), 
     @Character CHAR(1) 
) 
RETURNS @Output TABLE (
     Item NVARCHAR(1000) 
) 
AS 
BEGIN 
     DECLARE @StartIndex INT, @EndIndex INT 

     SET @StartIndex = 1 
     IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character 
     BEGIN 
      SET @Input = @Input + @Character 
     END 

     WHILE CHARINDEX(@Character, @Input) > 0 
     BEGIN 
      SET @EndIndex = CHARINDEX(@Character, @Input) 

      INSERT INTO @Output(Item) 
      SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1) 

      SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input)) 
     END 

     RETURN 
END 
GO 

そして、選択したクエリで上記の関数を使用してください。

SELECT Item 
FROM dbo.SplitString('Apple,Mango,Banana,Guava') 

You can refer this for more info

あなたはのSQL Server 2016を使用している場合は、そのSTRING_SPLIT

SELECT value 
FROM STRING_SPLIT('clothing,road,,touring,bike', ',') 
WHERE RTRIM(value) <> ''; 
関連する問題