4D v16.3

比較演算子

ホーム

 
4D v16.3
比較演算子

比較演算子  


 

 

この節の表は文字列、数値、日付、時間、ポインターおよびメタデータ式を持つピクチャー式に適用する比較演算子を示しています。配列やBLOBには使用できません。比較演算子を使用する式はTRUEまたはFALSEのブール値を返します。

: 2つのピクチャーをEqual picturesを使用して比較できます。

演算子シンタックス戻り値結果
= (等しい)文字列 = 文字列ブール"abc" = "abc"True
"abc" = "abd"False
# (異なる)文字列 # 文字列ブール"abc" # "abd"True
"abc" # "abc"False
> (大きい)文字列 > 文字列ブール "abd" > "abc"True
"abc" > "abc"False
< (小さい)文字列 < 文字列ブール"abc" < "abd"True
"abc" < "abc"False
>= (以上)文字列 >= 文字列ブール "abd" >= "abc"True
"abc" >= "abd"False
<= (以下)文字列 <= 文字列ブール "abc" <= "abd"True
"abd" <= "abc"False
% (キーワードを含む)文字列 % 文字列ブール "Alpha Bravo" % "Bravo"True
"Alpha Bravo" % "ravo"False
Picture % StringBooleanPicture_expr % "Mer"True (*)

(*) キーワード"Mer"がピクチャー式 (フィールドまたは変数) に格納されたピクチャーに割り当てられていた場合。

重要: この節の終りに、文字列比較に関する情報が提供されています。

演算子シンタックス戻り値結果
= (等しい)数値 = 数値ブール10 = 10True
10 = 11False
# (異なる)数値 # 数値ブール10 #11True
10 # 10False
> (大きい)数値 > 数値ブール11 > 10True
10 > 11False
< (小さい)数値 < 数値ブール10 < 11True
11 < 10False
>= (以上)数値 >= 数値ブール11 >= 10True
10 >= 11False
<= (以下)数値 <= 数値ブール10 <= 11True
11 <= 10False

注: 実数における比較演算の正確性についての詳細な情報については、SET REAL COMPARISON LEVEL コマンドを参照して下さい。

演算子シンタックス戻り値結果
= (等しい)日付 = 日付ブール!1/1/97! =!1/1/97!True
!1/20/97! =!1/1/97!False
# (異なる)日付 # 日付ブール!1/20/97! # !1/1/97!True
!1/1/97! # !1/1/97!False
> (大きい)日付 > 日付ブール!1/20/97! > !1/1/97!True
!1/1/97! > !1/1/97!False
< (小さい)日付 < 日付ブール!1/1/97! < !1/20/97!True
!1/1/97! < !1/1/97!False
>= (以上)日付 >= 日付ブール!1/20/97! >=!1/1/97!True
!1/1/97!>=!1/20/97!False
<= (以下)日付 <= 日付ブール!1/1/97!<=!1/20/97!True
!1/20/97!<=!1/1/97!False

演算子シンタックス戻り値結果
= (等しい)時間 = 時間ブール?01:02:03? = ?01:02:03?True
?01:02:03? = ?01:02:04?False
# (異なる)時間 # 時間ブール?01:02:03? # ?01:02:04?True
?01:02:03? # ?01:02:03?False
> (大きい)時間 > 時間ブール?01:02:04? > ?01:02:03?True
?01:02:03? > ?01:02:03?False
< (小さい)時間 < 時間ブール?01:02:03? < ?01:02:04?True
?01:02:03? < ?01:02:03?False
>= (以上)時間 >= 時間ブール?01:02:03? >=?01:02:03?True
?01:02:03? >=?01:02:04?False
<= (以下)時間 <= 時間ブール?01:02:03? <=?01:02:03?True
?01:02:04? <=?01:02:03?False

表中の例は、以下のようにポインターが設定されているものとして表記しています:

  ` vPtrA と vPtrB は同じオブジェクトを指します
 vPtrA:=->anObject
 vPtrB:=->anObject
  ` vPtrC は他のオブジェクトを指します
 vPtrC:=->anotherObject
演算子シンタックス戻り値結果
= (等しい)Pointer = PointerブールvPtrA = vPtrBTrue
vPtrA = vPtrCFalse
# (異なる)Pointer # PointerブールvPtrA # vPtrCTrue
vPtrA # vPtrBFalse

  • 文字列は文字ごとに比較されます (後述のキーワードによる検索の場合を除きます)。
  • 文字列が比較されるとき文字の大小文字は無視されます。したがって、"a"="A"はTRUEを返します。大文字と小文字を区別して比較するには、文字コードで比較してください。例えば次の式はFALSEです:

     Character code("A")=Character code("a") ` because 65 is not equal to 97
  • 文字列が比較される場合、文字は使用するコンピュータのシステム文字比較テーブルを使用して比較されます。例えば、以下の式は日本語システムではTRUEを返します:

     "あ"="ア"
     "ア"="ア"
     "1"="1"
  • 他の文字列比較と異なり、キーワードによる検索はテキスト中の単語を検索します: 単語は個々にかつそれが全体として扱われます。複数の単語を検索したり、音節など単語の一部を検索するような場合、% 演算子は常にFalseを返します。単語の判別はICUライブラリを使用して行われます。“Today's”のようにアポストロフィを含む単語は、通常、それを 含め1つの単語として扱われますが、特定の場合には無視されます(以下のルールを参照して下さい)。数字も検索できます。小数点も数字の一部、すなわち単語として扱われます。ただし通貨記号や温度記号などの記号は無視されます。

    : データベースの文字列比較の言語が日本語に設定されている場合、キーワードの分割は区切り文字を使用して判定されます。この場合の区切り文字は以下の通りです:
    • 文字コード32 (0x20) 以下の文字
    • ICUの関数u_isalphaとu_isdigitがともにFalseを返す文字

     "Alpha Bravo Charlie"%"Bravo" ` Returns True
     "Alpha Bravo Charlie"%"vo" ` Returns False
     "Alpha Bravo Charlie"%"Alpha Bravo" ` Returns False
     "Alpha,Bravo,Charlie"%"Alpha" ` Returns True
     "Software and Computers"%"comput@" ` Returns True

:
- 4Dは、キーワード検索にICUライブラリを使用します。実装されているルールの詳細に関しては、以下のアドレスを参照して下さい:http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries
- 日本語版の4Dでは、ICUの代わりにデフォルトではMecab が使用されています。詳細な情報に関しては、 Mecabのサポート(日本語版) を参照して下さい。

  • ワイルドカード記号 (@) は、すべての文字列の比較に使用することができます。これは任意の数の文字を比較します。したがって、次の式はTRUEになります:

     "abcdefghij"="abc@"


    任意の数の文字を比較する目的のワイルドカード記号は、2番目のオペランド (比較演算子の右側の式) で使用しなければなりません。最初のオペランドでは“@”は単なる1文字であると解釈されるため、次の式はFALSEです:

     "abc@"="abcdefghij"


    ワイルドカードは “0文字以上”を意味します。以下の式はTRUEです:

     "abcdefghij"="abcdefghij@"
     "abcdefghij"="@abcdefghij"
     "abcdefghij"="abcd@efghij"
     "abcdefghij"="@abcdefghij@"
     "abcdefghij"="@abcde@fghij@"


    一方、どのような場合でも、ワイルドカードを2つ連続して使用した文字列比較は常にFALSEを返します。次の式はFALSEになります:

     "abcdefghij"="abc@@fg"


    比較演算子が < または > 記号である、あるいはこれらを含む場合、第2オペランドの終りに置かれた1つのワイルドカードのみがサポートされます:

     "abcd"<="abc@" `有効な比較
     "abcd"<="abc@ef" `有効でない比較

Tip文字列の比較または検索において、@をワイルドカードではなく一般の文字として扱いたい場合、2つの方法があります:

  • Character code (At sign) 指示を使用する

    例えば文字列が @ 文字で終わっているかどうかを知りたいとします。

    - 以下の式は ($vsValue が空でなければ) 常にTRUEです:

     ($vsValue [[Length($vsValue)]]="@")


    - 以下の式は正しく評価されます:

     (Character code($vsValue[[Length($vsValue)]])#64)
  • データベース設定ダイアログボックスの「@がテキストパターンの最初または最後にある場合のみ、ワイルドカードとして扱う」をチェックする

    このオプションは、文字列に@が含まれているとき、@文字がどう解釈されるかを定義します。すなわちクエリと並び替えで、@をどのように扱うかに影響を与えます。 詳しくは、4D Design Referenceマニュアルを参照してください。



参照 

ピクチャ演算子
ビットワイズ演算子
数値演算子
日付演算子
時間演算子
演算子
論理演算子

 
プロパティ 

プロダクト: 4D
テーマ: 演算子

 
履歴 

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)