sql >> データベース >  >> RDS >> Sqlserver

SQL Serverは、コンマ区切りの文字列を1つの列に並べ替えます

    補足として、@ stringに特別なXML文字が含まれていない場合、TheGameiswarが投稿した内容は非常にうまく機能します。もしそうなら、あなたは小さな調整をする必要があるでしょう。これ:

    for xml path('')),1,1,'')
    

    これになる必要があります:

    for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');
    

    私のコメントと一緒に次のクエリを検討してください:

    declare @string varchar(max)
    set @string='<tag3>,<tag1>,<tag2>';
    
    -- Note the output here:
    ;with cte
    as
    (
    select *
    from dbo.delimitedSplit8K(@string,',')
    )
    select stuff( (select ',' +item 
    from cte
    order by item
    for xml path('')),1,1,'');
    
    -- this will handle special XML characters:
    WITH cte
    as
    (
    select *
    from dbo.delimitedSplit8K(@string,',')
    )
    select stuff( (select ',' +item 
    from cte
    order by item
    for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');
    

    ここで示している変更により、パフォーマンスは少し低下しますが、特殊なXML文字は正しく処理されます。

    編集:言及するのを忘れました-私が使用している「スプリッター」はこの記事からのものです: http://www.sqlservercentral.com/articles/Tally+Table/72993/



    1. PHPMySQLカウントクエリの結果は整数ではなく文字列です

    2. Workbenchを使用してサーバーからデータベースのERモデルを取得する方法

    3. PostgreSQL、2つのテーブルから選択しますが、テーブル2の最新の要素のみです

    4. 同じテーブルによって起動された後、トリガーはテーブルを読み取ることができません