SQLServerのTRIM関数で文字列の左右(前後)の空白文字を削除する

SQL Servrer TRIM関数

SQLServer 2017でTRIM関数が追加されました。
以前はLTRIM関数とRTRIM関数しかなかったので、文字列の左右(前後)の空白文字 CHAR(32) を取り除くには、LTRIM関数で左(前)の空白文字を削除して、さらにRTRIM関数で右(後)の空白文字を削除する(または、RTRIM関数で右(後)の空白文字を削除して、LTRIM関数で左(前)の空白文字を削除する)必要がありました。
なぜ今まで実装されなかったのかが不思議ですが、ようやくTRIM関数が使えるようになり、1つの関数で左右(前後)の空白文字を削除することが可能になりました。
また、TRIM関数は、LTRIM関数、RTRIM関数ではできなかった削除する文字の指定もできるようになりました。
今回はTRIM関数の使い方について紹介します。

SQL Server 2017 の新機能 TRIM関数

SQLServer 2017でTRIM関数が追加されたので、文字列の左右(前後)の空白文字を削除する処理が1つの関数で済むようになり、とても便利になりました。
TRIM関数を使うことで、LTRIM関数とRTRIM関数の重ね掛けを行っていた処理が不要になったのです。

TRIM関数が登場する前

TRIM関数がなかった頃は、以下のようなSQLを記述して左右(前後)の空白文字を削除していました。

TRIM関数の登場後

TRIM関数が追加されたので上記のSQLは次のように記述することができるようになりました。

TRIM関数は、LTRIM関数、RTRIM関数と同様に、引数に空白文字を含んだ文字列を指定すれば、空白文字を削除した文字列を返してくれます。

LTRIM関数 RTRIM関数には無い TRIM関数の新機能

TRIM関数では、LTRIM関数、RTRIM関数ではできなかった処理を行うことができるようになりました。

削除する文字列を指定できる

LTRIM関数、RTRIM関数では空白文字「半角スペース: CHAR(32)」しか削除することができませんでしたが、TRIM関数では削除する文字列を指定が可能になったので、全角スペースや改行文字、タブ文字なども削除することができるようになりました。

以下に全角スペースを削除する例を示します。

削除する文字列を指定する場合は、少し特殊な指定方法になります。普通に考えると第1引数に空白文字を含んだ文字列を指定して、第2引数に変換する文字列を指定するように思いますが、TRIM関数では引数は1つしか指定できません。ですので、TRIM関数の引数には変換する文字列を指定した後にFROMキーワードを使用して空白文字を含んだ文字列を指定します。

TRIM(‘空白などの変換する文字列’ FROM ‘空白などを含んだ文字列’)

上記のように記述することで、TRIM関数は指定した文字列を削除した文字列を返してくれます。

複数の文字列を1度に削除できる

TRIM関数にはLTRIM関数、RTRIM関数ではできなかった機能がもう1つあります。
それが1度の変換で複数の文字を削除する機能です。
この機能を使うことで、例えば「半角スペース」と「全角スペース」や、「CR:キャリッジリターン(\r)」と「LF: ラインフィード(\n)」(「CHAR(13) + CHAR(10)」)を削除することができます。

次の例では、削除する文字を含む文字列から「半角スペース」「全角スペース」「タブ文字」「改行文字」を1度のTRIM関数で削除しています。

削除する文字をすべてつなげた1つの文字列を引数に指定して、FROMキーワードで削除する文字を含む文字列を指定します。

上記の例では空白文字、タブ文字、改行文字を指定しましたが、TRIM関数では空白文字やタブ文字以外の任意の文字を削除することができます。

まとめ

SQLServer 2017で追加されたTRIM関数についてご紹介しました。

最後にTRIM関数の構文と使い方をおさらいしておきます。

TRIM関数 構文

charactersには、削除する必要がある文字を含む LOB 以外の任意の文字型 (nvarchar、varchar、nchar、またはchar) のリテラル、変数、または関数呼び出しが指定できます。
stringには、文字を削除する必要がある任意の文字型 (nvarchar、varchar、nchar、またはchar) の式が指定できます。

使用例

実行結果

SQL Server 2017 で追加された TRIM 関数の使用例

削除する文字を含んだ文字列のみ指定した場合は、空白文字 CHAR(32)(半角スペース)が文字列の左右(前後)から削除されます。
削除する文字を指定してFROMキーワードの後に削除する文字を含んだ文字列を指定した場合は、指定した文字が文字列の左右(前後)から削除されます。

Microsoftのヘルプによると、Azure Synapse (以前の Azure SQL Data Warehouse) では削除する文字の指定はできないようで、以下の構文を使うことになるみたいです。

TRIM関数が追加されたことでTransact-SQLでの空白文字の削除が簡単になりました。個人的にはTRIM関数での削除する文字の指定方法を第2引数で指定する形式

TRIM(‘空白などを含んだ文字列’, ‘空白などの変換する文字列’)

上記の構文だった場合の使用例

にしてほしかったかなと思います。また、LTRIM関数、RTRIM関数でも全角スペースなどの変換する文字列を指定できる仕様にしてほしいと思います。(次のSQL ServerのバージョンではLTRIM関数、RTRIM関数でも変換文字列を指定できるようになるいるかもしれません。)


参考: TRIM (Transact-SQL)