match (`true`) return `true`;
复制
类型表达式
类型 |
例子 |
十进制型整数 |
10, -213 |
十进制小数 |
1.25, 3.604E-14, -2.31 |
十进制型长整数 |
199345843592l, -12381543923L |
任意精度的有符号十进制数 |
123bd,123.31BD |
八进制整数(0开头) |
084, -096 |
字符串 |
"星环", '信息科技' |
布尔类型 |
true, false, TRUE, FALSE |
数组类型 |
[1,2,3],["星环","信息科技"],[decimal(10.2,3,1),decimal(100.2,3,2)] ,[localdatetime("2021-01-18T09:50:12.627"),localdatetime("2021-11-18T03:50:12.113")] |
时间类型 |
localdatetime("2021-01-18T09:50:12.627") |
Decimal类型 |
decimal(10.2,3,1) |
地理空间类型 |
point(20.5,30.5),point(-20.5,-30.5) |
时序类型 |
{localdatetime("2023-01-01T15:16:17")::"nice"}, {localdatetime("1997-01-01T15:16:17")::1997, localdatetime("1998-01-01T15:16:17")::1998} |
指代型表达式
类型 |
例子 |
变量 |
x, rel, myVar |
属性 |
a.prop, x.prop, rel.'surprise that this is a kind of property' |
函数调用 |
lenght(p), sum(a.salary) |
路径 |
(a)-[]->(b)-[]->(c) |
混合型表达式
类型 |
例子 |
符号运算 |
1*2+3, 1<2, -x |
正则表达式 |
transwarp.name =~'[a-z]' |
简单字符串匹配 |
a.name starts with "trans" |
逻辑控制 |
case n.category when 'food' then 1 when 'car' then 2 else 3 end |
命名规则
类型、属性名和变量名,遵循如下命名规则:
规则 | 正确用例 | 错误用例 |
---|---|---|
必须以字母开头 |
accustom |
_accustom |
可以有数字,但不能作为开头 |
name1 |
1name |
不能包含符号,下划线除外 |
name_g |
name* |
大小写敏感 |
School, sChool, school是三个不同的类型;x和X是不同的变量 |
单词间多余的空格会被自动删去: match (a) return a 和 match (a ) return a 等价。 |
保留关键字
在当前版本中,TEoC不区分保留关键字的大小写,部分留作未来使用。
ADD • ALL • ALTER • AND • AS • ASC • ASCENDING • ASSERT • BULK • BY • CALL • CASE • COMMIT • CONSTRAINT • CONTAINS • COPY • CREATE • CSV • DATABASE • DECL • DELETE • DESC • DESCENDING • DESCRIBE • DETACH • DISTINCT • DO • DROP • ELSE • END • ENDS • EXISTS • FILE • FOR • FOREACH • FROM • IN • INDEX • INSERT • INSTALL • INTO • IS • JOIN • JSON • KEY • LIMIT • LKJOIN • LOAD • MANDATORY • MATCH • MERGE • NODE • NOT • OF • ON • OPTIONAL • OR • ORDER • PERIODIC • REDUCE • RELATIONSHIP • REMOVE • REQUIRE • RETURN • RUN • SCALAR • SCAN • SCHEMA • SEARCH • SET • SHOW • SKIP • START • STARTS • THEN • TRUNCATE • UNION • UNIQUE • UNWIND • UPDATE • UPSERT • USING • WHEN • WHERE • WITH • XOR • YIELD • false • null • true
在查询语句中使用保留关键字作变量名或者类型名等场景,TEoC 与很多其他语言一样,需要使用反引号"`" 将关键字括起来, 例子如下:
符号
类型 |
符号 |
示例 |
属性符号 |
. |
match (a) return a.name; |
数学符号 |
+, -, *, /, %, ^ |
return 1 + 2; |
比较符号 |
=, <>, !=, <, >, ⇐, >=, IS NULL, IS NOT NULL |
详见《比较符号》小节 |
字符串匹配符号 |
STARTS WITH, ENDS WITH, CONTAINS, =~(正则表达式) |
详见《字符串匹配符号》小节 |
逻辑符号 |
AND, OR, XOR, NOT |
详见《逻辑符号》小节 |
字符串运算符号 |
字符串合并 |
return "Shanghai" + ", China"; |
集合符号 |
集合操作 |
详见《集合符号》小节 |
比较符号
查询 |
返回 |
return 1 = 2 |
false |
return 1 < 2 |
true |
return 1 is null |
false |
return 1 is not null |
true |
return 1 <> 1 |
false |
return 1 != 2 |
true |
字符串匹配符号
查询 |
返回 |
match (a) with tostring(a.name) as name where name starts with "abc" return name |
abcTest |
match (a) with tostring(a.name) as name where name ends with "abc" return name |
testabc |
match (a) with tostring(a.name) as name where name=~"t[a-z]+" return name |
test |
逻辑符号
查询 |
返回 |
match (a) where a.prop1 = 1 and a.prop2 = 2 return uid(a) |
uid1 |
match (a) where a.prop1 = 1 or a.prop2 = 2 return uid(a) |
uid2 |
match (a) where a.prop1 = 1 xor a.prop2 = 2 return uid(a) |
uid3 |
match (a) where not a.prop1 |
uid4 |
集合符号
查询 |
返回 |
return 1 in [1, 2] |
true |
unwind [1, 2, 3] as p return p |
1 2 3 |
转义字符
转义字符 |
十六进制 |
含义 |
\a |
0x07 |
响铃 |
\b |
0x08 |
退格,将当前位置移到前一列 |
\f |
0x0C |
换页,将当前位置移到下页开头 |
\n |
0x0A |
换行,将当前位置移到下一行开头 |
\r |
0x0D |
回车,将当前位置移到本行开头 |
\t |
0x09 |
水平制表 |
\v |
0x0B |
垂直制表 |
\\ |
0x5C |
反斜线 |
\' |
0x27 |
单引号 |
\" |
0x22 |
双引号 |
\? |
0x3F |
问号 |
\uhhhh |
4位十六进制数据所表示的字符,如\u0014 |
|
\Uhhhhhhhh |
8位十六进制数据所表示的字符,如\U0002A6A5 |
TEoC与很多其他语言一样,当字符串中含有转义字符时,将对所指符号进行转义, 例子如下所示,其返回结果是一个双引号。
return "\"";
复制
如果TEoC语句中的字符串含有转义字符,会自动将转义字符转义。如不需要转义,可以通过 set crux.escape.sequence.enabled = false 来关闭自动转义功能。 |