Skip to main content

REPLACE (SQL)

文字列内の部分文字列を置換する文字列関数です。

構文

REPLACE(string,oldsubstring,newsubstring)

概要

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 つすべての関数で大文字と小文字が区別され、一致するすべてのインスタンスが置換されます。

部分文字列を検索する関数のリストは、"文字列操作" を参照してください。

引数

string

部分文字列検索の検索対象となる文字列式。

oldsubstring

string 内で一致させる部分文字列。

newsubstring

oldsubstring を置換する部分文字列。

以下の例は、部分文字列 'P' のすべてのインスタンスを検索し、それを部分文字列 'K' で置き換えます。

SELECT REPLACE('PING PONG','P','K')

以下の例は、部分文字列 'KANSAS' のすべてのインスタンスを検索し、それを部分文字列 'NEBRASKA' で置き換えます。

SELECT REPLACE('KANSAS, ARKANSAS, NEBRASKA','KANSAS','NEBRASKA')

以下の例は、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

関連項目

FeedbackOpens in a new tab