Next: , Previous: SEX Operands, Up: Selection Expressions

#### 3.5.3 Operators

The supported operators are arithmetic operators (addition, subtraction, multiplication, division and modulus), logical operators, string operators and field operators.

##### 3.5.3.1 Arithmetic Operators

Arithmetic operators for addition (`+`), subtraction (`-`), multiplication (`*`), integer division (`/`) and modulus (`%`) are supported with their usual meanings.

These operators require either numeric operands or string operands whose value can be interpreted as numbers (integer or real).

##### 3.5.3.2 Boolean Operators

The boolean operators and (`&&`), or (`||`) and not (`!`) are supported with the same semantics as their C counterparts.

A compound boolean operator `=>` is also supported in order to ease the elaboration of constraints in records: `A => B`, which can be read as “A implies B”, translates into `!A || (A && B)`.

The boolean operators expect integer operands, and will try to convert any string operand to an integer value.

##### 3.5.3.3 Comparison Operators

The compare operators less than (`<`), greater than (`>`), less than or equal (`<=`), greater than or equal (`>=`), equal (`=`) and unequal (`!=`) are supported with their usual meaning.

Strings can be compared with the equality operator (`=`).

The match operator (`~`) can be used to match a string with a given regular expression (see Regular Expressions).

##### 3.5.3.4 Date Comparison Operators

The compare operators before (`<<`), after (`>>`) and same time (`==`) can be used with fields and strings containing parseable dates.

##### 3.5.3.5 Field Operators

Field counters are replaced by the number of occurrences of a field with the given name in the record. For example:

```     #Email
```

The previous expression is replaced with the number of fields named `Email` in the record. It can be zero if the record does not have a field with that name.

##### 3.5.3.6 String Operators

The string concatenation operator (`&`) can be used to concatenate any number of strings and field values.

```     'foo' & Name & 'bar'
```
##### 3.5.3.7 Conditional Operator

The ternary conditional operator can be used to select alternatives based on the value of some expression:

```     expr1 ? expr2 : expr3
```

If `expr1` evaluates to true (i.e. it is an integer or the string representation of an integer and its value is not zero) then the operator yields `expr2`. Otherwise it yields `expr3`.