String Specific Comparison Operators
Data Setup
SELECT * FROM cypher('graph_name', $$CREATE (:Person {name: 'John'}),(:Person {name: 'Jeff'}),(:Person {name: 'Joan'}),(:Person {name: 'Bill'})$$) AS (result agtype);
Starts With
Performs case-sensitive prefix searching on strings.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name STARTS WITH "J"RETURN v.name$$) AS (names agtype);
Results
| names |
| “John” |
| “Jeff” |
| “Joan” |
| 3 rows |
Contains
Performs case-sensitive inclusion searching in strings.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name CONTAINS "o"RETURN v.name$$) AS (names agtype);
Results
| names |
| “John |
| “Joan |
| 2 rows |
Ends With
Performs case-sensitive suffix searching on strings.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name ENDS WITH "n"RETURN v.name$$) AS (names agtype);
Results
| names |
| “John” |
| “Joan” |
| 2 rows |
Regular Expressions
AGE supports the use of POSIX regular expressions using the =~ operator. By default =~ is case sensitve.
Basic String Matching
The =~ operator when no special characters are given, act like the = operator.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name =~ 'John'RETURN v.name$$) AS (names agtype);
Results
| names |
| “John” |
| 1 rows |
Case insensitive search
Adding (?i) at the beginning of the string will make the comparison case insensitive
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name =~ '(?i)JoHn'RETURN v.name$$) AS (names agtype);
| names |
| “John” |
| 1 rows |
The . Wildcard
The . operator acts as a wildcard to match any single character.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name =~ 'Jo.n'RETURN v.name$$) AS (names agtype);
| names |
| “John” |
| “Joan” |
| 2 rows |
The * Wildcard
The * wildcard after a character will match to 0 or more of the previous character
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name =~ 'Johz*n'RETURN v.name$$) AS (names agtype);
| names |
| “John” |
| 1 rows |
The + Operator
The + operator matches to 1 or more the previous character.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name =~ 'Bil+'RETURN v.name$$) AS (names agtype);
Results
| names |
| “Bill” |
| 1 row |
The . and * wildcards together
You can use the . and * wildcards together to represent the rest of a string.
SELECT * FROM cypher('graph_name', $$MATCH (v:Person)WHERE v.name =~ 'J.*'RETURN v.name$$) AS (names agtype);
| names |
| “John” |
| “Jeff” |
| “Joan” |
| 2 rows |
Operator Precedence
Operator precedence in AGE is shown below:
| Precedence | Operator | |
| 1 | . | Property Access |
| 2 | [] | Map and List Subscripting |
| () | Function Call | |
| 3 | STARTS WITH | Case-sensitive prefix searching on strings |
| ENDS WITH | Case-sensitive suffix searching on strings | |
| CONTAINS | Case-sensitive inclusion searching on strings | |
| =~ | Regular expression string matching | |
| 4 | - | Unary Minus |
| 5 | IN | Checking if an element exists in a list |
| IS NULL | Checking a value is NULL | |
| IS NOT NULL | Checking a value is not NULL | |
| 6 | ^ | Exponentiation |
| 7 | * / % | Multiplication, division and remainder |
| 8 | + - | Addition and Subtraction |
| 9 | = <> | For relational = and ≠ respectively |
| < <= | For relational < and ≤ respectively | |
| > >= | For relational > and ≥ respectively | |
| 10 | NOT | Logical NOT |
| 11 | AND | Logical AND |
| 12 | OR | Logical OR |
