none
FOR XML PATH('') で結合した文字列中に改行を含む場合の処理について RRS feed

  • 質問

  • 複数の行を返すクエリの値を結合するために、 FOR XML PATH('') を使って以下のように記述しています。

    select col1 as [data()] from test1 for xml path('')

    このとき、いずれかの行にタブや改行文字が含まれていると、下記のような結果になり改行文字が 
 などのエンティティに変換されてしまいます。

    りんご
 もも みかん

    改行コードは通常の改行文字(char(13))として取得できるようにしたいのですが、これは結果をREPLACEで置き換えるしかないのでしょうか?

    2015年6月5日 0:40

回答

  • こんにちは。

    取得した値をどのように使いたいのかにより異なるかもしれませんが…
    以下のようにXMLとして扱った後にValueを取る方法があります。

    select (select col1 as [data()] from test1 for xml path(''),type).value('.', 'NVARCHAR(MAX)')
    • 回答としてマーク y-ohara 2015年6月8日 6:25
    2015年6月6日 21:36
    モデレータ

すべての返信

  • こんにちは。

    取得した値をどのように使いたいのかにより異なるかもしれませんが…
    以下のようにXMLとして扱った後にValueを取る方法があります。

    select (select col1 as [data()] from test1 for xml path(''),type).value('.', 'NVARCHAR(MAX)')
    • 回答としてマーク y-ohara 2015年6月8日 6:25
    2015年6月6日 21:36
    モデレータ
  • Tak1wa様

    ご提示いただきました方法にてうまくデータの取出しが出来ました。Valueで取り出せばよかったのですね。

    早速のご回答有難うございました。

    2015年6月8日 6:27
  • 余談ですが冒頭の書き方で文字化けする文字として"<", ">", "&"もあります。
    2015年6月9日 9:08