ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

SQL Server:改行コードをクエリで置き換える

データベースに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だけを検索してスペースに置き換えています。

f:id:AJYA:20161129060929j:plain
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,


プログラムで改行コードを置き換えることを考えていたので、クエリでできたのですっきりしました。