FIND( ) 関数

指定された文字列が、特定のフィールド中またはレコード全体のどこかに存在するかどうか示す論理値を返します。

メモ

FIND( ) 関数と FIND コマンド は Analytics の 2 つの異なる機能であり、大きな違いがあります。

構文

FIND(文字列 <,検索フィールド>)

パラメーター

名前 種類 説明
文字列

文字

検索する文字列。この検索では大文字と小文字が区別されません。
検索フィールド

省略可能

文字

検索場所のフィールドまたは変数。省略した場合は、未定義部分もすべて含めたレコードの全体が検索されます。

出力

論理。指定された文字列の値が見つかった場合は T(true)、そうでない場合は F(false)を返します。

基本的な例

レコード全体を検索する

次の例では、単一のフィールド、複数のフィールドのいずれか、または未定義部分の値が文字列 "New York" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND("New York")

単一のフィールド内の検索

次の例では、City フィールドの値が文字列 "New York" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND("New York", City)

City フィールドの値が文字列 "Ne" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND("Ne", City)

次の例では、City フィールドの値が 1 つ以上のスペースと文字列 "New York" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND(" New York", City)

次の例では、v_search_term 変数の値と完全一致または部分一致する値を Description フィールドに持つすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND(v_search_term, Description)

複数のフィールド内の検索

次の例では、City フィールドか City_2 フィールドのいずれかの値が文字列 "New York" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND("New York", City+City_2)

次の例では、City フィールドか City_2 フィールドのいずれかの値が文字列 "New York" であるすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND("New York", City) OR FIND("New York", City_2)

他の関数との組み合わせ

次の例では、Last_Name_2 フィールドの値が Last_Name フィールドの値と完全一致または部分一致するすべてのレコードに対し、'T' が返されます。それ以外のレコードに対しては 'F' が返されます。

FIND(ALLTRIM(Last_Name), Last_Name_2)

備考

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

FIND( ) 関数は、指定された文字列が特定のフィールド、2 つ以上のフィールドのいずれか、またはレコード内のいずれかのフィールドに存在するかどうかを調べる場合に使用できます。

文字列が一致する仕組み

文字列の値は、正確に一致することもあれば、長い文字列の中に含まれることもあります。フィールド内の先頭スペースは、文字列値の先頭に 1 つ以上のスペースを入れない限り、検索には影響しません。

レコード全体を検索する

任意指定の検索フィールドが指定されていない場合は、未定義部分もすべて含めたレコードの全体が検索されます。レコード全体が検索される場合には、フィールドの境界は無視され、フィールドの末尾のスペースは文字として扱われます。

メモ

レコード全体を検索する場合は、物理レコードが検索されます。演算フィールドおよび関連フィールドは検索されません。

フィールドのサブセットを検索する

テーブル内のフィールドのサブセット内を検索したい場合は、2 つ以上のフィールドを連結して検索フィールドに指定することができます。たとえば、City フィールドと City_2 フィールドの両方で文字列 "New York" を検索するには、次の関数を使用します。

FIND("New York", City+City_2)

連結したフィールドは 1 つのフィールドのように扱われます。ただし、ALLTRIM( ) 関数を使用して個々のフィールドからスペースを除去しなければ、各フィールドの先頭と末尾のスペースを含むフィールドとなります。

また、各フィールド内を別々に検索する式を作成することもできます。

FIND("New York", City) OR FIND("New York", City_2)

文字列の先頭にスペースが含まれている場合には、この 2 つの手法の検索結果は異なってくる可能性があります。

大文字と小文字の区別と正確な文字比較

FIND( ) 関数は大文字と小文字を区別せず、ASCII 文字と EBCDIC 文字の両方を検索します。この関数は、[正確な文字比較を行う]オプション(SET EXACT ON/OFF)の影響を受けません。

演算フィールド内を検索する

演算フィールド内を検索するには、検索フィールドにその演算フィールドの名前を指定する必要があります。たとえば、Vendor_City が住所から市区町村を抽出する演算フィールドの場合は、次のように指定します。

FIND("New York", Vendor_City)

関連フィールド内を検索する

関連付けられたフィールド内を検索するには、検索フィールド値にフィールドの完全修飾名(つまり、<テーブル>.<フィールド名>)を指定する必要があります。

FIND("New York", Vendor.Vendor_City)

日付時刻データまたは数値データを検索する

レコード レベルでの日付時刻データまたは数値データの検索には、FIND( ) 関数を使用できます。日付時刻または数値の検索では、検索フィールドの指定はサポートされていません。

数値または日付時刻文字列は引用符で囲む必要があるとともに、ビューにおける書式ではなくソース データの書式と完全に一致する必要があります。

FIND( ) 関数を使用して演算フィールドや関連フィールド内で日付時刻データや数値データを検索することはできません。

メモ

FIND( ) 関数は、日付時刻データや数値データをあまりうまく検索できないため、お勧めしません。

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