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:没有匹配到情况下,默认返回表达式。
查询:
结果: