MAP( ) 関数

文字列が、ワイルドカード文字やリテラル文字を含んでいる指定された書式文字列と一致するかどうかを示す論理値を返します。

構文

MAP(文字列, 書式)

パラメーター

名前 種類 説明
文字列

文字

一致をテストするフィールド、式、またはリテラル値。
書式

文字

文字列と比較するデータ パターンまたは文字列。

書式には、ワイルドカード文字、リテラル文字、これら 2 つの組み合わせを指定できます。

"\9\9\9-999-9999"

次のワイルドカード文字がサポートされています。

  • "X" – すべてのアルファベットに一致します(a ~ z、A ~ Z、欧州文字)。このワイルドカード文字には大文字と小文字の区別はありません。つまり、"X" と "x" のいずれをも使用できます。
  • "9" – すべての数字に一致します(0 ~ 9)。
  • "!" – 空白以外のすべての文字に一致します。
  • "?" – 空白を含むすべての文字に一致します。
  • "\" – 直後の文字をリテラルとして指定するエスケープ文字。ワイルドカード文字(X、x、9、!、?)のどれかと文字どおり一致させたい場合は、エスケープ文字を使用します。
  • "\\" – リテラルの円記号(¥)を指定しています。

出力

論理。一致するものが見つかった場合は T(true)、そうでない場合は F(false)を返します。

基本的な例

シンプルな検索パターン

T が返されます。

MAP("ABC Plumbing", "xxx")

文字列には 4 桁の数字が要求されているのに、3 桁の数字しかないため、F が返されます。

MAP("045", "9999")

ワイルドカードをエスケープする

リテラル文字 "X" で始まってその後に任意の文字が続く値に対してのみ 'T' を返すことが目的である場合は、書式パラメーター "\XX" を使用することで、最初の "X" をワイルドカードとしてでなくリテラルとして解釈されるようにします。

T が返されます。

MAP("XA-123", "XX")
MAP("GC-123", "XX")
MAP("XA-123", "\XX")

F が返されます。

MAP("GC-123", "\XX")

フィールドとパターン

次の例では、2 つの文字の後に 5 つの数字が続く構成であるか、またはこの構成で始まっている請求書番号が含まれるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

MAP(Invoice_Number, "XX99999")

次の例では、請求書番号が "AB12345" であるか、または "AB12345" で始まるすべてのレコードに対して、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

MAP(Invoice_Number, "AB12345")

次の例では、"AB" の後に 5 つの数字が続く構成であるか、またはこの構成で始まっている請求書番号が含まれるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

MAP(Invoice_Number, "AB99999")

次の例では、SSN フィールドの値が社会保障番号の標準形式と一致しないすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

NOT MAP(SSN, "999-99-9999")

高度な例

「859-」で始まる 10 文字の製品コードを持つレコードを抽出する

「859-」で始まる 10 文字以上の製品コードを持つレコードのみを抽出するには、次の IF ステートメントと MAP( ) 関数を使用します。

EXTRACT RECORD IF MAP(Product_Code, "85\9-999999") TO "Long_Codes_859"

備考

MAP( ) の使用に適する場面

MAP( ) 関数は、英数字データからパターンや特定の書式を検索する場合に使用できます。このパターンや書式にはワイルドカード文字、リテラル文字、またはその双方の組み合わせを指定できます。

大文字と小文字の区別

MAP( ) 関数で 2 つのリテラル値を比較する場合、大文字と小文字は区別されません。たとえば、"a" は "A" と同等ではありません。

文字列のデータが大文字と小文字のどちらかに統一されていない場合は、MAP( ) 関数を使用する前に UPPER( ) 関数を使用して、大文字と小文字のどちらかのみになるように値を変換することができます。

例:

MAP(UPPER(Invoice_Number), "AB99999")

部分一致

MAP( ) では、部分一致がサポートされる場合とサポートされない場合があります。

MAP( ) における部分一致は、[正確な文字比較を行う]オプション(SET EXACT ON/OFF)の影響を受けるわけではありません。

部分一致がサポートされる場合とは

部分一致がサポートされるのは、書式の値が文字列の値より短い場合です。

書式が 7 文字で、文字列が 9 文字のため、T が返されます。

MAP("AB1234567", "AB99999")

メモ

T(True)が返されるには、書式の値が文字列の値の先頭に出現している必要があります。

部分一致がサポートされない場合とは

部分一致がサポートされないのは、書式の値が文字列の値より長い場合です。

書式が 7 文字で、文字列が 6 文字のため、F が返されます。

MAP("AB1234567", "AB99999")

書式文字列より長い場合には、結果は常に False になります。

空白の処理

空白は文字として扱われ、次のいずれかの方法で処理できます。

  • 文字どおり空白に一致させる。そのように処理するには、書式の値の該当する位置に空白を挿入します。
  • ワイルドカード "?" を使用する。これは、空白を含むすべての文字に一致します。

必要に応じて、文字列パラメーターに対し、TRIM( )、LTRIM( ) または ALLTRIM( ) 関数を使用して先頭または末尾の空白を除去することにより、テキストの文字とテキスト中の空白のみが比較されるようにすることができます。

フィールドの連結

テーブル内の複数のフィールド内の値を検索したい場合は、2 つ以上のフィールドを連結して文字列に指定することができます。連結したフィールドは 1 つのフィールドのように扱われます。ただし、ALLTRIM( ) 関数を使用して個々のフィールドから空白を除去しなければ、各フィールドの先頭と末尾の空白を含むフィールドとなります。

ACL のスクリプト作成ガイド 14.1