String operators¶
You can use the following string operators for concatenating, querying, and matching.
| Name | Description |
|---|---|
| + | Concatenates strings. |
| CONTAINS | Performs searchings in strings. |
| (NOT) IN | Checks whether a value is within a set of values. |
| (NOT) STARTS WITH | Performs matchings at the beginning of a string. |
| (NOT) ENDS WITH | Performs matchings at the end of a string. |
| Regular expressions | Perform string matchings using regular expressions. |
Note
All the string searchings or matchings are case-sensitive.
Examples¶
+¶
ngql
nebula> RETURN 'a' + 'b';
+-----------+
| ("a"+"b") |
+-----------+
| "ab" |
+-----------+
nebula> UNWIND 'a' AS a UNWIND 'b' AS b RETURN a + b;
+-------+
| (a+b) |
+-------+
| "ab" |
+-------+
CONTAINS¶
The CONTAINS operator requires string types on both left and right sides.
```ngql nebula> MATCH (s:player)-[e:serve]->(t:team) WHERE id(s) == "player101" \ AND t.team.name CONTAINS "ets" RETURN s.player.name, e.start_year, e.end_year, t.team.name; +---------------+--------------+------------+-------------+ | s.player.name | e.start_year | e.end_year | t.team.name | +---------------+--------------+------------+-------------+ | "Tony Parker" | 2018 | 2019 | "Hornets" | +---------------+--------------+------------+-------------+
nebula> GO FROM "player101" OVER serve WHERE (STRING)properties(edge).start_year CONTAINS "19" AND \ properties(\(^).name CONTAINS "ny" \ YIELD properties(\)^).name, properties(edge).start_year, properties(edge).end_year, properties(\(\().name; +---------------------+-----------------------------+---------------------------+---------------------+ | properties(\)^).name | properties(EDGE).start_year | properties(EDGE).end_year | properties(\)$).name | +---------------------+-----------------------------+---------------------------+---------------------+ | "Tony Parker" | 1999 | 2018 | "Spurs" | +---------------------+-----------------------------+---------------------------+---------------------+
nebula> GO FROM "player101" OVER serve WHERE !(properties(\(\().name CONTAINS "ets") \ YIELD properties(\)^).name, properties(edge).start_year, properties(edge).end_year, properties(\)\().name; +---------------------+-----------------------------+---------------------------+---------------------+ | properties(\)^).name | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name | +---------------------+-----------------------------+---------------------------+---------------------+ | "Tony Parker" | 1999 | 2018 | "Spurs" | +---------------------+-----------------------------+---------------------------+---------------------+ ```
(NOT) IN¶
ngql
nebula> RETURN 1 IN [1,2,3], "Yao" NOT IN ["Yi", "Tim", "Kobe"], NULL IN ["Yi", "Tim", "Kobe"];
+----------------+------------------------------------+-------------------------------+
| (1 IN [1,2,3]) | ("Yao" NOT IN ["Yi","Tim","Kobe"]) | (NULL IN ["Yi","Tim","Kobe"]) |
+----------------+------------------------------------+-------------------------------+
| true | true | __NULL__ |
+----------------+------------------------------------+-------------------------------+
(NOT) STARTS WITH¶
```ngql nebula> RETURN 'apple' STARTS WITH 'app', 'apple' STARTS WITH 'a', 'apple' STARTS WITH toUpper('a'); +-----------------------------+---------------------------+------------------------------------+ | ("apple" STARTS WITH "app") | ("apple" STARTS WITH "a") | ("apple" STARTS WITH toUpper("a")) | +-----------------------------+---------------------------+------------------------------------+ | true | true | false | +-----------------------------+---------------------------+------------------------------------+
nebula> RETURN 'apple' STARTS WITH 'b','apple' NOT STARTS WITH 'app'; +---------------------------+---------------------------------+ | ("apple" STARTS WITH "b") | ("apple" NOT STARTS WITH "app") | +---------------------------+---------------------------------+ | false | false | +---------------------------+---------------------------------+ ```
(NOT) ENDS WITH¶
ngql
nebula> RETURN 'apple' ENDS WITH 'app', 'apple' ENDS WITH 'e', 'apple' ENDS WITH 'E', 'apple' ENDS WITH 'b';
+---------------------------+-------------------------+-------------------------+-------------------------+
| ("apple" ENDS WITH "app") | ("apple" ENDS WITH "e") | ("apple" ENDS WITH "E") | ("apple" ENDS WITH "b") |
+---------------------------+-------------------------+-------------------------+-------------------------+
| false | true | false | false |
+---------------------------+-------------------------+-------------------------+-------------------------+
Regular expressions¶
Note
Regular expressions cannot work with native nGQL statements (GO, FETCH, LOOKUP, etc.). Use it in openCypher only (MATCH, WHERE, etc.).
NebulaGraph supports filtering by using regular expressions. The regular expression syntax is inherited from std::regex. You can match on regular expressions by using =~ 'regexp'. For example:
```ngql nebula> RETURN "384748.39" =~ "\d+(\.\d{2})?"; +--------------------------------+ | ("384748.39"=~"\d+(.\d{2})?") | +--------------------------------+ | true | +--------------------------------+
nebula> MATCH (v:player) WHERE v.player.name =~ 'Tony.*' RETURN v.player.name; +---------------+ | v.player.name | +---------------+ | "Tony Parker" | +---------------+ ```