SQL Server 2017 新機能 - TRIM 関数
SQL Server 2017 新機能 - TRIM 関数
やっと!という感じですが、SQL Server 2017 で TRIM という組み込み関数ができました。
これまでは、前後の空白をトリムしたい時には LTRIM と RTRIM の二つを使わなければなりませんでしたが、SQL Server 2017 以降では TRIM 関数ひとつでトリムできるようになります。
TRIM 関数
TRIM 関数は、CHAR(32) のスペースか、指定した文字を、文字の前後から削除してくれる関数で、構文は次の通りです。
TRIM ([[ 削除したい文字 ] FROM ] [ 文字列 ] )
[[ 削除したい文字 ] FROM ] の部分はオプショナルで、指定しなければ [ 文字列 ] の前後から CHAR(32) のスペースが削除されます。
[ 削除したい文字 ] には削除したい文字を複数個指定することができ、指定した順番は関係ありません。
例えば、' AB,CD., # ' という文字列を TRIM 関数を使ってトリムしてみます。
DECLARE @Input NVARCHAR(MAX) = ' AB,CD., # '; SELECT '||' + @Input + '||' AS Result1, '||' + TRIM(@Input) + '||' AS Result2, '||' + TRIM('#,' FROM @Input) + '||' AS Result3, '||' + TRIM('.#, ' FROM @Input) + '||' AS Result4;
[ 実行結果 ]
結果が見やすいように文字の前後に 「 || 」 を追加しています。
Result2 は、削除したい文字を指定しなかったので、前後の空白がトリムされています。
Result3 は、'#,' を削除する文字として指定しましたが、@Input の前後にその文字がきていなかったので空白もトリムされず、入力文字列のまま出力されています。
Result4 は '.#, ' Result3 に加え空白も削除する文字列として指定したので、前後の指定した文字がトリムされて 「 AB,CD 」 が返ってきています。
また、LTRIM(RTRIM(@Input)) ではトリムできなかった、全角スペースも指定してトリムできます。
DECLARE @Input NVARCHAR(MAX) = N' てすと '; SELECT '||' + LTRIM(RTRIM(@Input)) + '||' AS Result1, '||' + TRIM(' ' FROM @Input) + '||' AS Result2
[ 実行結果 ]
見えませんが、Result2 の [ 削除したい文字 ] の ' ' には '[全角スペース][半角スペース]' と指定してあります。