概要
REPLACE は部分文字列を検索して、一致するすべての文字列を置換します。マッチングでは、大文字と小文字が区別されます。一致が見つかれば、oldsubstring のすべてのインスタンスが newsubstring で置換されます。置換部分文字列は、置換対象となる部分文字列よりも長いか短い場合があります。部分文字列が見つからなければ、REPLACE は元の string を変更せずに返します。
REPLACE で返される値は、string のデータ型に関係なく、必ず VARCHAR データ型です。したがって、REPLACE(12.3,'.','_') などの置換操作が可能です。
REPLACE では string 引数、oldsubstring 引数または newsubstring 引数に %Stream.GlobalCharacter フィールドを使用することはできません。これを実行しようとすると、SQLCODE -37 エラーが生成されます。
空の文字列は文字列値です。そのため、引数の値には空の文字列を指定できます。ただし、ObjectScript の空文字列は、NULL として InterSystems SQL に渡されることに注意してください。
InterSystems SQL では、NULL はデータ値ではありません。このため、REPLACE 引数のいずれかに NULL を指定すると、一致があるかどうかに関係なく NULL が返されます。
この関数には Transact-SQL 実装との互換性があります。
REPLACE、STUFF、および $TRANSLATE
REPLACE および STUFF の両方とも、部分文字列の置換を実行します。REPLACE は、データ値によって部分文字列を検索します。STUFF は、文字列の位置と長さによって部分文字列を検索します。
REPLACE は、1 つの文字列と文字列をマッチングして置換します。$TRANSLATE は、文字と文字をマッチングして置換します。指定された 1 つまたは複数の単一文字のすべてのインスタンスを、指定された対応する置換単一文字に置き換えることができます。指定された 1 つまたは複数の単一文字のすべてのインスタンスを 1 つの文字列から削除することもできます。
既定では、3 つすべての関数で大文字と小文字が区別され、一致するすべてのインスタンスが置換されます。
部分文字列を検索する関数のリストは、このドキュメントの "概念" セクションにある "文字列操作" を参照してください。
例
以下の例は、部分文字列 'P' のすべてのインスタンスを検索し、それを部分文字列 'K' で置き換えます。
SELECT REPLACE('PING PONG','P','K')
以下の埋め込み SQL の例は、部分文字列 'KANSAS' のすべてのインスタンスを検索し、それを部分文字列 'NEBRASKA' で置き換えます。
SET str="KANSAS, ARKANSAS, NEBRASKA"
&sql(SELECT REPLACE(:str,'KANSAS','NEBRASKA') INTO :x)
WRITE !,"SQLCODE=",SQLCODE
WRITE !,"Output string=",x
以下の例は、REPLACE が他の文字列値と同様、空の文字列 (") を処理することを示しています。
SELECT REPLACE('','','Nothing'),
REPLACE('PING PONG','','K'),
REPLACE('PING PONG','P','')
以下の例は、REPLACE が NULL を返すことによって NULL 引数を処理していることを示しています。一致のない最後の例を含み、以下の REPLACE 関数すべてが NULL を返します。
SELECT REPLACE(NULL,'K','P'),
REPLACE(NULL,NULL,'P'),
REPLACE('PING PONG',NULL,'K'),
REPLACE('PING PONG','P',NULL),
REPLACE('PING PONG','Z',NULL)
以下の埋め込み SQL の例は、前述の NULL の例と同じです。ObjectScript の空文字列のホスト変数が、SQL 内で NULL として処理される方法を示しています。
SET a=""
&sql(SELECT
REPLACE(:a,'K','P'),
REPLACE(:a,:a,'P'),
REPLACE('PING PONG',:a,'K'),
REPLACE('PING PONG','P',:a),
REPLACE('PING PONG','Z',:a)
INTO :v,:w,:x,:y,:z)
WRITE !,"SQLCODE=",SQLCODE
WRITE !,"Output string=",v
WRITE !,"Output string=",w
WRITE !,"Output string=",x
WRITE !,"Output string=",y
WRITE !,"Output string=",z