Comparison Operators

version 6.5 (Modified)

The tables in this section show the comparison operators as they apply to string, numeric, date, time, and pointer expressions. An expression that uses a comparison operator returns a Boolean value, either TRUE or FALSE.

String Comparisons

 Operation Syntax Returns Expression Value Equality String = String Boolean "abc" = "abc" True "abc" = "abd" False Inequality String # String Boolean "abc" # "abd" True "abc" # "abc" False Greater than String > String Boolean "abd" > "abc" True "abc" > "abc" False Less than String < String Boolean "abc" < "abd" True "abc" < "abc" False Greater than or equal to String >= String Boolean "abd" >= "abc" True "abc" >= "abd" False Less than or equal to String <= String Boolean "abc" <= "abd" True "abd" <= "abc" False

Numeric Comparisons

 Operation Syntax Returns Expression Value Equality Number = Number Boolean 10 = 10 True 10 = 11 False Inequality Number # Number Boolean 10 #11 True 10 # 10 False Greater than Number > Number Boolean 11 > 10 True 10 > 11 False Less than Number < Number Boolean 10 < 11 True 11 < 10 False Greater than or equal to Number >= Number Boolean 11 >= 10 True 10 >= 11 False Less than or equal to Number <= Number Boolean 10 <= 11 True 11 <= 10 False

Date Comparisons

 Operation Syntax Returns Expression Value Equality Date = Date Boolean !1/1/97! =!1/1/97! True !1/20/97! =!1/1/97! False Inequality Date # Date Boolean !1/20/97! # !1/1/97! True !1/1/97! # !1/1/97! False Greater than Date > Date Boolean !1/20/97! > !1/1/97! True !1/1/97! > !1/1/97! False Less than Date < Date Boolean !1/1/97! < !1/20/97! True !1/1/97! < !1/1/97! False Greater than or equal to Date >= Date Boolean !1/20/97! >=!1/1/97! True !1/1/97!>=!1/20/97! False Less than or equal to Date <= Date Boolean !1/1/97!<=!1/20/97! True !1/20/97!<=!1/1/97! False

Time Comparisons

 Operation Syntax Returns Expression Value Equality Time = Time Boolean ?01:02:03? = ?01:02:03? True ?01:02:03? = ?01:02:04? False Inequality Time # Time Boolean ?01:02:03? # ?01:02:04? True ?01:02:03? # ?01:02:03? False Greater than Time > Time Boolean ?01:02:04? > ?01:02:03? True ?01:02:03? > ?01:02:03? False Less than Time < Time Boolean ?01:02:03? < ?01:02:04? True ?01:02:03? < ?01:02:03? False Greater than or equal to Time >= Time Boolean ?01:02:03? >=?01:02:03? True ?01:02:03? >=?01:02:04? False Less than or equal to Time <= Time Boolean ?01:02:03? <=?01:02:03? True ?01:02:04? <=?01:02:03? False

Pointer comparisons

With:

```      ` vPtrA and vPtrB point to the same object
vPtrA:=->anObject
vPtrB:=->anObject
` vPtrC points to another object
vPtrC:=->anotherObject
```

 Operation Syntax Returns Expression Value Equality Pointer = Pointer Boolean vPtrA = vPtrB True vPtrA = vPtrC False Inequality Pointer # Pointer Boolean vPtrA # vPtrC True vPtrA # vPtrB False

Strings are compared on a character-by-character basis.

When strings are compared, the case of the characters is ignored; thus, "a"="A" returns TRUE. To test if the case of two characters is different, compare their ASCII codes. For example, the following expression returns FALSE:

```   Ascii ("A") = Ascii ("a") ` because 65 is not equal to 97
```

When strings are compared, diacritical characters are compared using the system character comparison table of your computer. For example, the following expressions return TRUE:

```   "n" = "ñ"
"n" = "Ñ"
"A"="å"
` and so on
```

The wildcard character (@) can be used in any string comparison to match any number of characters. For example, the following expression is TRUE:

`   "abcdefghij" = "abc@" `

The wildcard character must be used within the second operand (the string on the right side) in order to match any number of characters. The following expression is FALSE, because the @ is considered only as a one character in the first operand:

```   "abc@" = "abcdefghij"
```

The wildcard means "one or more characters or nothing". The following expressions are TRUE:

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

On the other hand, whatever the case, a string comparison with two consecutive wildcards will always return FALSE. The following expression is FALSE:

```   "abcdefghij" = "abc@@fg"
```

Tip

If you want to execute comparisons or queries using @ as a character (and not as a wildcard), you have two options:

Use the Ascii (At sign) instruction.

Imagine, for example, that you want to know if a string ends with the @ character.

- the following expression (if \$vsValue is not empty) is always TRUE:

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

- the following expression will be evaluated correctly:

```   (Ascii (\$vsValue[[Length(\$vsValue)]])#64)
```

Use the "Consider @ as a character for Query and Order By" option which can be accessed using the Preferences dialog box.

This option lets you define how the @ character is interpreted when it is included in a character string. As such, it can influence how comparison operators are used in Query or Order By. For more information, refer to the 4D Design Reference manual.