BETWEEN( ) 関数

指定された値が範囲内にあるかどうかを示す論理値を返します。

構文

BETWEEN(, 最小値, 最大値)

パラメーター

名前 説明

文字

数値

日付時刻

テストするフィールド、式、またはリテラル値。
最小値

文字

数値

日付時刻

範囲の最小値。

フィールド、式、またはリテラル値にすることができます。

最大値

文字

数値

日付時刻

範囲の最大値。

フィールド、式、またはリテラル値にすることができます。

メモ

T(true)と評価する範囲には、最小値最大値が含まれます。

文字の範囲については、SET EXACT の動作を参照してください。

出力

論理。 最小値以上かつ最大値以下である場合は、T(true)を返します。 そうでない場合は F(false)を返します。

基本的な例

数値型の入力値

T が返されます。

BETWEEN(500,400,700)

F が返されます。

BETWEEN(100,400,700)

文字型の入力値

T が返されます。

BETWEEN("B","A","C")

文字の比較で大文字と小文字が区別され、小文字 "b" は大文字 "A" と "C" の間には位置しないため、F が返されます。

BETWEEN("b","A","C")

日付時刻型の入力値

T が返されます。

BETWEEN(`141230`,`141229`,`141231`)

Login_time フィールドの値のうち、午前 7 時 0 分 0 秒から午前 9 時 0 分 0 秒までのすべての値を指定した場合は 'T' が返され、それ以外の値を指定した場合は 'F' が返されます。

BETWEEN(Login_time,`t070000`,`t090000`)

SET EXACT の動作

Last_Name フィールドの値のうち、"C" から "K" の文字で始まるすべての値を指定した場合は 'T' が返され、それ以外の値を指定した場合は 'F' が返されます(SET EXACT を OFF にしておく必要があります)。

BETWEEN(Last_Name, "C", "K")

Last_Name フィールドの値のうち、"C" から "J" の文字で始まるすべての値を指定した場合は 'T' が返され、それ以外の値を指定した場合は 'F' が返されます(SET EXACT を ON にしておく必要があります)。 単一の文字 "K" を指定した場合には、T が返されます。

BETWEEN(Last_Name, "C", "K")

フィールドへの入力値

Invoice_Date フィールドの値のうち、2014 年 9 月 30 日から 2014 年 10 月 30 日までのすべての値を指定した場合は 'T' が返され、それ以外の値を指定した場合は 'F' が返されます。

BETWEEN(Invoice_Date, `20140930`, `20141030`)

請求日(Invoice_Date)が発注日(PO_Date)と支払日(Paid_Date)の間にないすべてのレコードに対しては 'T' が返され、それ以外のレコードに対しては 'F' が返されます。

NOT BETWEEN(Invoice_Date, PO_Date, Paid_Date)

Invoice_Amount フィールドの値のうち、2014 年 9 月 30 日から 2014 年 10 月 30 日までのすべての値を指定した場合は 'T' が返され、それ以外の値を指定した場合は 'F' が返されます。

BETWEEN(Invoice_Amount, 1000, 5000)

高度な例

給与の範囲を表示するためのフィルターを作成する

次の例は、Employee_List サンプル テーブルを開き、給与が 40,000.00 ドル以上、50,000.00 ドル以下の従業員のみが含まれるように、表示されるレコードを制限するフィルターを適用しています。

OPEN Employee_List
SET FILTER TO BETWEEN(Salary, 40000.00, 50000.00)

変化する範囲内の日付を検索するフィルターを作成する

会社の旅費交通費システムのデータを、会社のクレジットカード データに結合するテーブルを作成しました。 会社のクレジットカードに課金されたホテルの宿泊料金が払い戻された従業員を検出したいと思います。

金額フィールドで 2 つのデータのセットを結合し、ホテルの宿泊日と旅費の発生日を使用して、2 つの金額が同じ費用を指していることを確認する計画です。 問題は、費用システムの日付が会社のクレジットカード データのホテルの日付と 1、2 日ずれる可能性があることです。

以下の例は、Joined_expense_data テーブルを開き、ホテルの宿泊日の範囲内の費用発生日を検索するフィルターを適用します。 実際の日付値ではなくフィールドを使用すると、日付とともに範囲が代わります。

OPEN Joined_expense_data
SET FILTER TO BETWEEN(T_E_date, Arrival_date-2, Arrival_date+2) OR BETWEEN(T_E_date, Departure_date-2, Departure_date+2)

備考

サポートされているデータ型

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

AND 演算子の代わりに BETWEEN( ) を使用する

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

例:

BETWEEN(Invoice_Amount, 1000, 5000)

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

Invoice_Amount >= 1000 AND Invoice_Amount <= 5000

最小値最大値の順序

BETWEEN( ) 関数に指定する最小値最大値の順序は重要ではありません。値の大小関係は Analytics が自動的に識別します。

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

BETWEEN(2500, 1000, 5000)
BETWEEN(2500, 5000, 1000)

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

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

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

BETWEEN(1.23, 1.23, 1.25)

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

BETWEEN(1.23, 1.234, 1.25)

文字データ

大文字と小文字の区別

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

F が返されます。

BETWEEN("B","a","C")

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

T が返されます。

BETWEEN(UPPER("B"), UPPER("a"), UPPER("C"))

部分一致

文字比較では、部分一致がサポートされます。

最小値より大きいと見なされる場合があります。

"AB" は最小値 "ABC" より小さいように見えますが、T が返されます。

BETWEEN("AB", "ABC", "Z")

最大値より小さいと見なされる場合があります。

"ZZ" は最大値 "Z" より大きいように見えますが、T が返されます。

BETWEEN("ZZ", "ABC", "Z")

メモ

文字比較において、短い値は、一致を成す長い値の先頭に現れる必要があります。

部分一致と SET EXACT

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

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

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

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

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

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

日付時刻パラメーター

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

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

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

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

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

2014 年 12 月 31 日は最小値最大値によって指定された範囲に含まれるため、T が返されます。

BETWEEN(`20141231`,`20141229`,`20141231`)

2014 年 12 月 31 日は最小値最大値によって指定された範囲に含まれるように見えますが、F が返されます。

BETWEEN(`20141231 120000`,`20141229`,`20141231`)

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

シリアル値であるがシリアル値である最大値と等しいため、T が返されます。

BETWEEN(42003.000000, 42001.000000, 42003.000000)

シリアル値であるがシリアル値である最大値より大きいため、F が返されます。

BETWEEN(42003.500000, 42001.000000, 42003.000000)

2 つの日付が同一であっても、シリアル値の 42003.50000042003.000000 より大きいため、範囲外になります。 0.500000 は 12:00 PM に相当するシリアル値です。

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

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

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

BETWEEN(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」という使い方は避けてください。 信頼できない結果になる可能性があります。