MATCH( ) 関数

指定された値が比較対象の値のうちのどれかと一致するかどうかを示す論理値を返します。

構文

MATCH(比較値, テスト <,...n>)

パラメーター

名前 種類 説明
比較値

文字

数値

日付時刻

一致をテストするフィールド、式、またはリテラル値。
テスト <,...n>

文字

数値

日付時刻

比較値と比較するフィールド、式、またはリテラル値。

必要な数のテスト値を指定できますが、指定したすべての値は同じデータ型である必要があります。

MATCH(比較値, `20140930`, `20141030`)

メモ

MATCH( ) 関数への入力値には文字、数値、日付時刻のデータを指定できます。データ型を混在させることはできません。入力値はすべて同じデータ型に属している必要があります。

出力

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

基本的な例

メモ

特に指定のない限り、SET EXACT は OFF(デフォルト設定)であることを前提として、文字比較の値を返します。

リテラル値をテストする

T が返されます。

MATCH("ABC", "BCD", "CDE", "AB")

F が返されます。

MATCH(98, 99, 100, 101)

フィールドをテストする

次の例では、Vendor_City フィールドの値が "Phoenix"、"Austin"、または "Los Angeles" であるすべてのレコードに対し、T が返されます。それ以外のレコードに対しては 'F' が返されます。

MATCH(Vendor_City, "Phoenix", "Austin", "Los Angeles")

次の例では、Vendor_City フィールドの値が "Phoenix"、"Austin"、または "Los Angeles" でないすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

NOT MATCH(Vendor_City, "Phoenix", "Austin", "Los Angeles")

次の例では、Vendor_City フィールドの値が "PHOENIX"、"AUSTIN"、または "LOS ANGELES"(大文字か小文字かを問わない)であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

Vendor_City フィールドの値が、大文字に変換されてから、大文字の都市名と比較されます。

MATCH(UPPER(Vendor_City), "PHOENIX", "AUSTIN", "LOS ANGELES")

複数のフィールドをテストする

次の例では、Vendor_CityCity、または City_2 フィールドの値が "Phoenix" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

MATCH("Phoenix", Vendor_City, City, City_2)

SET EXACT の動作

次の例では、Product_Code フィールド内の製品コードが "A"、"D"、または "F" であるか、もしくは "A"、"D"、"F" で始まるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

MATCH(Product_Code, "A", "D", "F")

次の例では、Product_Code フィールド内の製品コードが 1 文字の "A"、"D"、または "F" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては F が返されます(SET EXACT を ON にしておく必要があります)。

MATCH(Product_Code, "A", "D", "F")

2 つのフィールドを比較する

次の例では、業者と従業員の住所が同一の値であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

業者と従業員の住所の形式を統一する必要がある場合は、その他の関数を使用します。

MATCH(Vendor_Address, Employee_Address)

日付同士を比較する

次の例では、請求日が 2014 年 9 月 30 日か 2014 年 10 月 30 日であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

MATCH(Invoice_Date, `20140930`, `20141030`)

高度な例

異常な在庫レコードを抽出する

Inventory_Value_at_Cost フィールドと演算フィールド Cost_x_Quantity の間で金額が異なるすべてのレコードに対し、'T' が返されます。

EXTRACT RECORD IF NOT MATCH(Inventory_Value_at_Cost, Cost_x_Quantity) TO "Non_matching_amounts"

部門 101、103、および 107 のレコードを抽出する

以下のように IF ステートメントと MATCH( ) 関数を使用することで、部門 101、103、または 107 に関連するレコードのみを抽出できます。

EXTRACT RECORD IF MATCH(Dept, "101", "103", "107") TO "Three_Departments"

備考

OR 演算子の代わりに MATCH( ) を使用する

AND 演算子を使用する式の代わりに MATCH( ) 関数を使用することができます。

例:

MATCH(City, "Phoenix", "Austin", "Los Angeles")

上記の関数は、次の式と同等です。

City="Phoenix" OR City="Austin" OR City="Los Angeles"

数値型入力値の小数点以下の精度

比較する数値型入力値の小数点以下の精度が異なる場合、比較は高い方の精度に合わせて行われます。

1.23 は 1.23 と等しいため、T が返されます。

MATCH(1.23, 1.23, 1.25)

小数点第 3 位まで考慮されるため、1.23 は 1.234 と等しくないと判定されるので、F が返されます。

MATCH(1.23, 1.23, 1.25)

文字パラメーター

大文字と小文字の区別

文字データが使用される場合、MATCH( ) 関数は大文字と小文字を区別します。文字を比較する場合、"a" は "A" と同等ではありません。

F が返されます。

MATCH("a","A","B","C")

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

T が返されます。

MATCH(UPPER("a"), UPPER("A"), UPPER("B"),  UPPER("C"))

部分一致

文字比較では、部分一致がサポートされます。比較するどちらか一方の値がもう一方の値の一部である場合に、これらの値が一致と見なされます。

次の例ではいずれも T が返されます。

MATCH("AB", "ABC")
MATCH("ABC", "AB")

メモ

短い値は、一致を成す長い値の先頭に出現している必要があります。

部分一致と SET EXACT

部分一致は、Analytics のデフォルト設定である SET EXACT = OFF の場合に有効になります。SET EXACT = ON にすると、部分一致は無効になり、比較値が一致を成すには、正確に一致しなければなりません。

SET EXACT が ON の場合、上記の例はどちらも False になります。

SET EXACT([正確な文字比較を行う]オプション)の詳細については、SET コマンドを参照してください。

SET EXACT の OFF または ON への設定

MATCH( ) 関数で[正確な文字比較を行う]オプションが使用されないようにしたい場合は、[オプション]ダイアログ ボックスの[テーブル]タブ([ツール > オプション])でこのオプションが選択されていないことを確認してください。

スクリプトを使用している場合は、MATCH( ) 関数が現れる前に SET EXACT OFF コマンドを追加します。必要に応じて、SET EXACT ON コマンドによって前の状態に戻すことができます。

日付時刻パラメーター

関数への入力として指定された日付、日付時刻、または時刻フィールドは、フィールド定義で正しく書式を定義してさえいれば、どのような日付書式、日付時刻書式、または時刻書式でも使用することができます。

日付型、日付時刻型、時刻型の入力値を混在させる

MATCH( ) 関数の入力値に日付値、日付時刻値、および時刻値を混在させることは禁止されていませんが、これら日付時刻のサブタイプを混在させると、意味のない結果が返される可能性があります。

日付時刻値の日付部分のみに関心があっても、時刻部分はまだ計算の一部を構成しているため、Analytics は対応するシリアル値を使用して、日付時刻の計算を処理しています。

次の例で考えてみましょう。

2014 年 12 月 31 日は 2 番目の テスト値と一致しているため、T が返されます。

MATCH(`20141231`,`20141229`,`20141231`)

比較値と 2 番目のテスト値は同一の日付 2014 年 12 月 31 日を持っているにもかかわらず、F が返されます。

MATCH(`20141231 120000`,`20141229`,`20141231`)

これら 2 つの式の対応するシリアル値を見ると、どうして 2 番目の式が false と評価されるのかがわかります。

比較値のシリアル番号が 2 番目のテスト値のシリアル番号と等しいため、T が返されます。

MATCH(42003.000000, 42001.000000, 42003.000000)

比較値のシリアル番号がどのテスト値とも等しくないため、F が返されます。

MATCH(42003.500000, 42001.000000, 42003.000000)

シリアル番号 42003.50000042003.000000 の間では、日付部分は一致していますが、時刻部分は一致していません。0.500000 は 12:00 PM に相当するシリアル値です。

日付時刻サブタイプ同士を一致させる

混在する日付時刻サブタイプによって発生する可能性のある問題を回避するには、サブタイプ同士を一致させる関数を使用します。

たとえば、次の式では、上記の 2 番目の式と同じ初期値が使用されていますが、F でなく T が返されます。

MATCH(CTOD(DATE(`20141231 120000`,"YYYYMMDD"),"YYYYMMDD"),`20141229`, `20141231`)

リテラル日付、日付時刻、または時刻値の指定

関数への入力のいずれかにリテラルの日付値、日付時刻値、または時刻値を指定する場合は、次の表内の書式に制限されます。また、`20141231` のように、値を逆引用符で囲む必要があります。

日付または時刻の個々の要素の間に、スラッシュ(/)やコロン(:)のような区切り文字をいっさい使用しないでください。

  • 日付時刻値 – 以下の表に示す日付、区切り文字、および時刻の書式を任意に組み合わせて使用することができます。日付を時刻の前に置く必要があり、かつ、2 つの間に区切り文字を使用する必要があります。有効な区切り文字は空白スペース 1 つ、あるいは文字 't' または 'T' です。

  • 時刻値 – 24 時間形式で時刻を指定する必要があります。UTC(Coordinated Universal Time:協定世界時)からのオフセットは、プラス記号(+)またはマイナス記号(-)で始める必要があります。

    形式の例

    リテラル値の例

    YYYYMMDD

    `20141231`

    YYMMDD

    `141231`

    YYYYMMDD hhmmss

    `20141231 235959`

    YYMMDDthhmm

    `141231t2359`

    YYYYMMDDThh

    `20141231T23`

    YYYYMMDD hhmmss+/-hhmm

    (UTC オフセット)

    `20141231 235959-0500`

    YYMMDD hhmm+/-hh

    (UTC オフセット)

    `141231 2359+01`

    thhmmss

    `t235959`

    Thhmm

    `T2359`

    メモ

    UTC オフセットが設定されているデータのメインの時刻書式で hh を単独で使用しないでください。たとえば、「hh+hhmm」という使い方は避けてください。信頼できない結果になる可能性があります。

     

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