2017-11-03 7 views
1

にも、空の値を分割します。私はネット上をサーフィンすることで多くの提案を見つけました。ほとんどの人は、関数dbo.Splitを提案します。スプリットパイプは、私はパイプが並ぶ文字列以下のように持っているSQL Serverの

私はその機能を使用して、私の文字列を分割しよう:

SELECT ROW_NUMBER() OVER(ORDER BY(SELECT NULL))RN, Items 
FROM dbo.Split('1|Content|2017-02-11|Guest|Gold|||||1903','|') 

それは以下のような結果が得られます。

RN Items 
1 1 
2 Content 
3 2017-02-11 
4 Guest 
5 Gold 
6 1903 

これは、すべての空の値をスキップして、行を保持している値のみを与えます。しかし、私の場合には、空の任意の値が、その後、私は以下のようにそれをしたい場合:

意味
RN Items 
1 1 
2 Content 
3 2017-02-11 
4 Guest 
5 Gold 
6 
7 
8 
9 
10 1903 

、私は「」として空バレスをしたいです。私は試してみることができません。これを手伝ってください。ありがとう。

答えて

1

簡単な方法は、行を使用してパイプ並ぶ文字列データを変換するXMLメソッドを使用してここにある:

DECLARE @DATA NVARCHAR(MAX); 

SET @DATA = '1|Content|2017-02-11|Guest|Gold|||||1903'; 

SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) RN, 
     split.a.value('.', 'VARCHAR(MAX)') [Items] 
FROM 
(
    SELECT CAST('<X>'+REPLACE(@DATA, '|', '</X><X>')+'</X>' AS XML) AS String 
) A 
CROSS APPLY String.nodes('/X') AS split(a); 

結果:

RN Items 
1 1 
2 Content 
3 2017-02-11 
4 Guest 
5 Gold 
6 
7 
8 
9 
10 1903 
+0

ああ!すごい。サポートしてくれてありがとう。 – DineshDB

関連する問題