データベースにSQL Serverが利用されているシステムから、データの取得を行っています。
改行コードが含まれているカラムから、改行コードを半角スペースに置き換えて取得することになりました。
プログラムではなくクエリで置き換える
クエリで置換できないかと調べたらSQL Serverには、REPLACE()がありました。REPLACE()を使って以下のようにしたら、改行コードを半角スペースに置換できました。
REPLACE( REPLACE( REPLACE(comment, CHAR(13) + CHAR(10), ' ') , CHAR(13), ' ') , CHAR(10), ' ') AS remove_crlf_comment,
CHAR(13)は、CR: キャリッジリターン (carriage return)、CHAR(10) は、LF: ラインフィード (line feed)のASCIIコードです。
最初にCR+LFで検索してスペースに置き換えています。
2番目にCRだけ、3番目にLFだけを検索してスペースに置き換えています。
最初のCR+LFで検索して大丈夫なようでしたが、念のためCRだけ、LFだけを検索してスペースに置き換えています。
photo credit: Michael Kappel SQL Saturday 119 Fourth Session 056 via photopin (license)
text型の場合は型変換が必要
対象のカラムがtext型の場合は、型変換が必要になります。型変換にはCAST()を用います。
REPLACE( REPLACE( REPLACE(CAST(comment AS char), CHAR(13) + CHAR(10), ' ') , CHAR(13), ' ') , CHAR(10), ' ') AS remove_crlf_comment,
プログラムで改行コードを置き換えることを考えていたので、クエリでできたのですっきりしました。