便利な SQL の関数とか、構文とか、その他色々まとめてみる - その18 ( 令和元年記念投稿 )
平成も終わり、令和が始まりました。平成最後の年は、自分自身として人生の転機でした。ただ、まだまだ進化はしていきたいので、変化を恐れず進んでいきたいと思っています。
今回は、TRANSLATE (Transact-SQL) - SQL Server | Microsoft Docs について説明します。一見、REPLACE (Transact-SQL) - SQL Server | Microsoft Docs 似ていますが、REPLACE では複雑になってしまう処理も TRANSLATE では非常に簡潔に記述することが可能です。それでは、REPLACE と TRANSLATE で記述内容を比較してみましょう。下記のクエリを SQL Server Management Studio で実行してみましょう。
DECLARE @str NVARCHAR(255) = 'aaa,aaa,aaa|bbb,bbb,bbb' SELECT REPLACE(REPLACE(REPLACE(@str,'|','*'),',','|'),'*',',') [REPLACE], TRANSLATE(@str, ',|', '|,') [TRANSLATE]
TRANSLATE は下記の部分が特徴となります。
TRANSLATE 関数の動作は、複数の REPLACE 関数を使用した場合と似ています。 ただし、TRANSLATE では文字が複数回置き換えられることはありません。 これは、使用するたびに関連するすべての文字が置き換えられる複数の REPLACE 関数とは異なります。
ストアドプロシージャでよく RELACE 関数が何重にも入れ子になっている処理を見かけることがあります。全ての場合において使用できるわけではありませんが、TRANSLATE を使って、複雑になってしまったストアドプロシージャをリファクタリングしましょう。