Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$TRANSLATE

文字と文字の置換を行う文字列関数です。

Synopsis

$TRANSLATE(string,identifier[,associator])

引数

string ターゲット文字列。フィールド名、リテラル、ホスト変数、または SQL 式のいずれかにできます。
identifier string 内で検索する文字。文字列または数値のリテラル、ホスト変数、または SQL 式のいずれかにできます。
associator オプションidentifier でそれぞれの文字に対応する置き換え文字。 文字列または数値のリテラル、ホスト変数、または SQL 式のいずれかにできます。

概要

$TRANSLATE 関数は、返り値の文字列内の文字と文字の置き換えを行います。string 引数の処理を一度に 1 文字行います。string にある各文字と identifier 引数にある各文字とを比較します。$TRANSLATE が一致するものを見つけると、文字の位置を書きとめます。

  • 引数が 2 つの形式の $TRANSLATE は、identifier 引数にある文字のすべてのインスタンスを出力文字列から取り除きます。

  • 引数が 3 つの形式の $TRANSLATE は、string 内で見つかった各 identifier 文字のすべてのインスタンスを、位置的に対応する associator 文字と置き換えます。置換は、文字列単位ではなく文字単位で行われます。identifier 引数に含まれる文字が associator 引数よりも多い場合、identifier 引数にある余分な文字は出力文字列から削除されます。 identifier 引数に含まれる文字が associator 引数よりも少い場合、associator 引数にある余分な文字は無視されます。

SQLCODE -380 は、指定した引数が少なすぎる場合に発行されます。SQLCODE -381 は、指定した引数が多すぎる場合に発行されます。

$TRANSLATE は、大文字と小文字を区別します。

$TRANSLATE は、NULL を文字と置き換えるためには使用できません。

$TRANSLATE および REPLACE

$TRANSLATE は文字と文字をマッチングして置換します。REPLACE は文字列と文字列をマッチングして置換します。REPLACE では、1 つ以上の文字から成る指定された単一の部分文字列を別の部分文字列に置換することや、指定された部分文字列の複数のインスタンスを削除することができます。$TRANSLATE は、複数の指定された文字を対応する指定された置換文字に置換できます。

既定では、どちらの関数も大文字小文字を区別して、string の先頭から開始し、一致するすべてのインスタンスを置換します。REPLACE には、これらの既定を変更するために使用できる引数があります。

以下の例では、引数が 2 つの $TRANSLATE によって、句読点 (コンマ、スペース、ピリオド、アポストロフィ、ハイフン) を削除することで Name 値を変更し、アルファベット文字のみから成る名前を返します。identifier では、アポストロフィが二重になることに注意してください。これは、アポストロフィを文字列区切りではなくリテラル文字としてエスケープするためです。

SELECT TOP 20 Name,$TRANSLATE(Name,', .''-') AS AlphaName 
FROM Sample.Person
WHERE Name %STARTSWITH 'O'

以下の例では、引数が 3 つの $TRANSLATE によって、コンマおよびスペースをキャレット (^) 文字に置き換えることで Name 値を変更し、3 つの部分 (姓、名、ミドルネームのイニシャル) に区切られた名前を返します。associator では、identifier 内の文字数と同数の “^” を指定する必要があることに注意してください。

SELECT TOP 20 Name,$TRANSLATE(Name,', ','^^') AS PiecesNamePunc
FROM Sample.Person
WHERE Name %STARTSWITH 'O'

以下の例では、引数が 3 つの $TRANSLATE によって、コンマおよびスペースをキャレット (^) 文字に置き換え (identifier および associator 内で指定されている)、ピリオド、アポストロフィ、およびハイフンを削除することで (identifier 内では指定されており、associator からは省略されている)、Name 値を変更します。

SELECT TOP 20 Name,$TRANSLATE(Name,', .''-','^^') AS PiecesNameNoPunc 
FROM Sample.Person
WHERE Name %STARTSWITH 'O'

関連項目

FeedbackOpens in a new tab