次の方法で共有


TRANSLATE (Transact-SQL)

適用対象: SQL Server 2017 (14.x) 以降 Azure SQL データベース Azure SQL Managed Instance

最初の引数として指定した文字列を、2 番目の引数で指定したいくつかの文字を 3 番目の引数で指定した対象の文字セットに変換した後に、返します。

構文

TRANSLATE ( inputString, characters, translations )

引数

inputString

検索対象となる文字列inputString には、任意の文字データ型 (nvarchar、varchar、nchar、char) を指定できます。

characters

置換対象の文字が含まれる文字列characters には、任意の文字データ型を指定できます。

translations

置換文字が含まれる文字列translations には、characters と同じデータ型および長さを指定する必要があります。

戻り値の型

2 番目の引数の文字が 3 番目の引数の一致する文字に置き換えられた、inputString と同じデータ型の文字式を返します。

解説

characters 式と translations 式の長さが異なる場合、TRANSLATE はエラーを返します。 TRANSLATE は、いずれかの引数が NULL の場合は NULL を返します。

TRANSLATE 関数の動作は、複数の REPLACE 関数を使用した場合と似ています。 ただし、TRANSLATE では、inputString 内の個々の文字が複数回置き換えられることはありません。 characters パラメーター内の 1 つの値が inputString 内の複数の文字を置き換えることはあります。

これは、複数の REPLACE 関数の動作とは異なります。関数を呼び出すごとに、前回の入れ子になった REPLACE 関数呼び出しによって置き換えられている場合であっても、関連するすべての文字が置き換えられるためです。

TRANSLATE は常に SC 照合順序を認識しています。 補助照合順序の詳細については、照合順序と Unicode のサポートに関する記事を参照してください。

A. 角かっこと中かっこを通常のかっこで置き換える

次のクエリは、入力文字列の角かっこと中かっこを通常のかっこで置き換えます。

SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()');

結果セットは次のとおりです。

2*(3+4)/(7-2)

REPLACE と同等の呼び出し

次の SELECT ステートメントには、4 つの入れ子になった REPLACE 関数の呼び出しのグループがあります。 このグループは、1 つ前の SELECT での TRANSLATE 関数に対する 1 回の呼び出しと同等です。

SELECT
REPLACE
(
      REPLACE
      (
            REPLACE
            (
                  REPLACE
                  (
                        '2*[3+4]/{7-2}',
                        '[',
                        '('
                  ),
                  ']',
                  ')'
            ),
            '{',
            '('
      ),
      '}',
      ')'
);

B. GeoJSON ポイントを WKT に変換する

GeoJSON は、いくつかの地理データ構造をエンコードするための形式です。 TRANSLATE 関数を使用すると、開発者は GeoJSON ポイントから WKT 形式への変換とその逆の変換に簡単に実行できます。 次のクエリによって、入力の角かっこと中かっこが、通常のかっこで置き換えられます。

SELECT TRANSLATE('[137.4,72.3]' , '[,]', '( )') AS Point,
    TRANSLATE('(137.4 72.3)' , '( )', '[,]') AS Coordinates;

結果セットは次のとおりです。

ポイント 座標
(137.4 72.3) [137.4,72.3]

C. TRANSLATE 関数を使用する

SELECT TRANSLATE('abcdef','abc','bcd') AS Translated,
       REPLACE(REPLACE(REPLACE('abcdef','a','b'),'b','c'),'c','d') AS Replaced;

結果セットは次のとおりです。

変換後 置換後
bcddef ddddef

関連項目