# Operators
With the SQL Assessment API, you can use different kinds of operators to make your assessment even more precise.
## In This Section
- [Logical](#logical)
- [String](#string)
- [Math](#math)
- [Set](#set)
- [Comparison](#comparison)
## Logical
|Operator|Arguments|Description|
|-|:-:|-|
|not|(*x*)|Logical not.|
|and|(*a*..\*)|Logical AND. Returns `false` without arguments.|
|or|(*a*..\*)|Logical OR. Returns `true` without arguments.|
## String
|Operator|Arguments|Description|
|-|:-:|-|
|indexof|(*str_a*, *str_b*)|Finds a zero-based index of the first *str_b* occurrence in the string *str_a*. Case-sensitive.|
|iindexof|(*str_a*, *str_b*)|Finds a zero-based index of the first *str_b* occurrence in the string *str_a*. Case-insensitive.|
|startswith|(*str_a*, *str_b*)|Returns `true` if the string *str_a* starts with the string *str_b*. Case-sensitive.|
|istartswith|(*str_a*, *str_b*)|Returns `true` if the string *str_a* starts with the string *str_b*. Case-insensitive.|
|endswith|(*str_a*, *str_b*)|Returns `true` if the string *str_a* ends with the string *str_b*. Case-sensitive.|
|iendswith|(*str_a*, *str_b*)|Returns `true` if the string *str_a* ends with the string *str_b*. Case-insensitive.|
## Math
|Operator|Arguments|Description|
| - |:-:| - |
|ceiling|*x*|Rounds *x* to the nearest greater or equal value.|
|floor|*x*|Rounds *x* to the nearest lower or equal value.|
|max|(*a*, *b*)|Returns maximum of *a* and *b*.|
|min|(*a*, *b*)|Returns minimum of *a* and *b*.|
|mul|(*a*..\*)|Arithmetic multiplication.|
|div|(*a*, *b*)|Arithmetic division of *a* by *b*.|
|mod|(*a*, *b*)|Arithmetic remainder of *a* divided by *b*.|
|add|(*a*..\*)|Arithmetic sum.|
|sub|(*a*, *b*)|Arithmetic difference of *a* and *b*.|
|bitand|(*a*..\*)|Bitwise AND.|
|bitor|(*a*..\*)|Bitwise OR.|
|bitxor|(*a*..\*)|Bitwise XOR.|
## Set
|Operator|Arguments|Description|
| - | :-: |-|
|intersect|(*a*, *b*)|Sets intersection of *a* and *b* arguments. Case-sensitive.|
|in|(*a*, *b*)|Checks if the argument *a* was found in *b*. The *b* argument represents a collection. Case-sensitive.|
|iin|(*a*, *b*)|Checks if the argument *a* was found in *b*. The *b* argument represents a collection. Case-insensitive.|
## Comparison
|Operator|Synonyms|Arguments| Description|
| - | - | :-: | - |
|lt|less|(*a*, *b*)|Checks if the argument *a* is less than the argument *b*.|
|gt|greater|(*a*, *b*)|Checks if the argument *a* is greater than the argument *b*.|
|eq|equal|(*a*, *b*)|Checks if both arguments are equal. Case-sensitive.|
|ieq||(*a*, *b*)|Checks if both arguments are equal. Case-insensitive.|
|ge|greaterequal|(*a*, *b*)|Checks if the argument *a* is greater than or equals to the argument *b*.|
|le|lessequal|(*a*, *b*)|Checks if the argument *a* is less than or equals to the argument *b*.|
|ne|notequal|(*a*, *b*)|Checks if the argument *a* is not equal to the argument *b*. Case-sensitive.|
|ine||(*a*, *b*)|Checks if the argument *a* is not equal to the argument *b*. Case-insensitive.|
|match||(*a*, *b*)|Regular expression match. The second argument is treated as a regular expression. Case-sensitive.|
|imatch||(*a*, *b*)|Regular expression match. The second argument is treated as a regular expression. Case-insensitive.|
|interval||(*a*,*v1*,*t1*,...,*vn*,*tn*,*d*)|Finds the first *ti* that is greater than or equal to *a* and returns the corresponding *vi*. Returns *d* if all *t* are less than *a*.|