| Operator | Description | Standard | 
|---|
| p + q | Addition/concatenation.  For numeric values (integer, double, and money data types), this simply adds the two values together and results in a similar value.  For string values, this concatenates the two strings together.  This operator is undefined for datetime values. | Numeric: ANSI. Strings: Sybase/MSSQL. | 
| p - q | Subtraction.  Subtracts one integer, double, or money data type from another.  This operator is undefined for datetime values.  For strings, this is the reverse of concatenation: "abc" - "c" would yield "ab".  Subtracting strings in this way can be particularly useful when a concatenation expression requires separators between elements, but not after the last element, as in: sum(:string_field + ',') - ',' | Numeric: ANSI. Strings: Centrallix. | 
| p * q | Multiplication.  Multiplies one integer, double, or money data type by another.  This operator is also defined for multiplying a string value by an integer value - the result is the repeated concatenation of the string (p) a number (q) times. | Numeric: ANSI. Strings: Centrallix. | 
| p / q | Division.  Divides one integer, double, or money data type by another.  This operator is not defined for strings and datetime values. | ANSI | 
| NOT p | Boolean negation.  Boolean values in Centrallix are treated as integers; this operator returns 0 if p is not 0, and returns 1 if p is 0.  Alternatively, returns FALSE if p is TRUE, and returns TRUE if p is FALSE. | 
| p AND q | Boolean AND.  Returns TRUE (1) if both p and q are not FALSE (0).  Otherwise returns FALSE (0). | ANSI, except Centrallix allows treating a boolean as a numeric value. | 
| p OR q | Boolean OR.  Returns TRUE (1) if either p or q is not FALSE (0).  Otherwise returns FALSE (0). | ANSI | 
| p IS NULL | Returns TRUE (1) if p is NULL, otherwise returns FALSE. | ANSI | 
| p IS NOT NULL | Returns TRUE (1) if p isn't NULL, otherwise returns FALSE. | ANSI | 
| p = q | Equality comparison.  Also can be written as "p == q".  Results in TRUE (1) if p and q have the same value.  If either p or q is NULL, this returns FALSE (0).  Even if both p and q are NULL, this returns FALSE (0). | ANSI (=). Centrallix (==). | 
| p != q | Inequality comparison.  Also can be written as "p <> q".  Results in TRUE (1) only if p and q have different values.  If either p or q are NULL (or if both are NULL), results in FALSE(0). | ANSI (!=). Centrallix(<>). | 
| p > q | Greater-than.  Results in TRUE (1) only if p is greater than q and both p and q are not NULL.  When comparing strings, the strings are compared on a binary basis. | ANSI | 
| p >= q | Greater than or equals.  Also can be written "p !< q" (p is not less than q).  Results in TRUE only if p is greater than or equal to q and both p and q are not NULL. | ANSI (>=). Centrallix (!<). | 
| p < q | Less-than.  Results in TRUE (1) only if p is less than q and both p and q are not NULL. | ANSI | 
| p <= q | Less than or equals.  Also can be written "p !> q" (p is not greater than q).  Results in TRUE only if p is less than or equal to q and both p and q are not NULL. | ANSI (<=). Centrallix (!>). | 
| p *= q | An equality comparison operator for performing an outer join in a WHERE clause.  The "mandatory" table's attribute in the outer join should be on the * side of the *= (or =*) operator.  For example :tbl:key *= :codetbl:key means that rows from 'tbl' should be returned even if they don't have matching rows from 'codetbl'. | Sybase/MSSQL | 
| :p | Returns the value of the attribute p, in the "current" object (depends on the context). | Centrallix | 
| :p:q | Returns the value of q, an attribute of the object p. | Centrallix | 
| ::p | Returns the value of the attribute p in the "parent" object (what object is the parent object depends on the context). | Centrallix |