3.2.2 表达式

3.2.2.1 概述

Cypher中的表达式如下:

● 十进制(整型和双精度型)的字面值:13、-4000、3.14、6.022E23。

● 十六进制整型字面值(以0x开头):0x13zf、0xFC3A9、-0x66eff。

● 八进制整型字面值(以0开头):01372、02127、-05671。

● 字符串字面值:'Hello'、"World"。

● 布尔字面值:true、false、TRUE、FALSE。

● 变量:n、x、rel、myFancyVariable、`A name with weird stuff in it[]!`。

● 属性:n.prop、x.prop、rel.thisProperty、myFancyVariable. `(weird property name)`。

● 动态属性:n["prop"]、rel[n.city + n.zip]、map[coll[0]]。

● 参数:$param、$0。

● 表达式列表:['a', 'b']、[1, 2, 3]、['a', 2, n.property, $param]、[ ]。

● 函数调用:length(p)、nodes(p)。

● 聚合函数:avg(x.prop)、count(*)。

● 路径-模式:(a)-->()<--(b)。

● 计算式:1 + 2 and 3 < 4。

● 返回true或者false的断言表达式:a.prop = 'Hello'、length(p) >10、exists(a.name)。

● 正则表达式:a.name =~ 'Tob.*'。

● 大小写敏感的字符串匹配表达式:a.surname STARTS WITH 'Sven'、a.surname ENDS WITH'son' or a.surname CONTAINS 'son'。

● CASE表达式。

3.2.2.2 转义字符

Cypher中的字符串可以包含的转义字符如表3-1所示。

表3-1 Cypher中的字符串可以包含的转义字符

3.2.2.3 Case表达式

Cypher支持Case条件表达式,它类似于其他语言中的if/else语句。

1.简单的Case表达式

计算表达式的值,然后依次与WHEN语句中的表达式进行比较,直到匹配上为止。如果未匹配上,则ELSE中的表达式将作为结果。如果ELSE语句不存在,那么将返回null。

语法:

参数:

● test:一个有效的表达式。

● value:一个表达式,它的结果将与test表达式的结果进行比较。

● result:如果value表达式能够与test表达式匹配,则它将作为结果表达式。

● default:没有匹配的情况下的默认返回表达式。

查询:

结果:

2.一般的Case表达式

按顺序判断断言,直到找到true为止,然后对应的结果被返回。如果没有找到,就返回ELSE的值。如果没有ELSE语句,则返回null。

语法:

参数:

● predicate:判断的断言,以找到一个有效的可选项。

● result:如果predicate匹配到,result就作为结果表达式。

● default:没有匹配到情况下,默认返回表达式。

查询:

结果: