0

データベースにテキスト フィールドがあります。

DECLARE @vchText varchar(max) = 
 This is a string<>Test1<>Test2<>Test

その @vchText パラメータは次のように返されます。

  This is a string: 

     1. Test1    
     2. Test2 
     3. Test

誰でもこれを修正する良い方法を考えます。WHILE LOOP を使用した STUFF 関数と CHARINDEX 関数を考えていました...?

また、リストには1,2,3個のアイテムしかない可能性があるため、さらに多くのアイテムが存在する可能性があるため、ビルドできないため、静的で1,2,3のみを処理する必要があることに注意してください。リスト内の任意の数のアイテムに対して機能します。

4

2 に答える 2

0

これを試して。文字列をパーツに分割します。

  1. 前編~This is a list:

  2. 第二部 -1.Test1 1.Test2 1.Test3

delimiter を使用して、 2 番目の部分を行に変換しますSpacerow_number次に、行に追加します。row_numberと列のデータを追加します。

最後に、さまざまな行を で区切られた単一の行に変換spaceし、first part

DECLARE @NOTE   VARCHAR(max) = 'This is a list: 1.Test1 1.Test2 1.Test3',
        @temp   VARCHAR(max),
        @output VARCHAR(max)

SELECT @temp = Substring(@NOTE, Charindex(':', @NOTE) + 2, Len(@note))

SELECT @output = LEFT(@NOTE, Charindex(':', @NOTE) + 1)

SELECT @output += CONVERT(VARCHAR(10), Row_number() OVER (ORDER BY col))
                  + Substring(col, Charindex('.', col), Len(col))
                  + ' '
FROM   (SELECT Split.a.value('.', 'VARCHAR(100)') col
        FROM   (SELECT Cast ('<M>' + Replace(@temp, ' ', '</M><M>') + '</M>' AS XML) AS Data) AS A
               CROSS APPLY Data.nodes ('/M') AS Split(a)) ou

SELECT @output -- This is a list: 1.Test1 2.Test2 3.Test3 
于 2014-11-30T16:33:01.120 に答える