![精通Neo4j](https://wfqqreader-1252317822.image.myqcloud.com/cover/113/47216113/b_47216113.jpg)
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中的字符串可以包含的转义字符
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-T113_101435.jpg?sign=1739376105-LVk2kH9g4tWBD5Lxt6KYQbtBGAiUlf4F-0-0bc9f327c45c98bdcc08462cb82bf5a1)
3.2.2.3 Case表达式
Cypher支持Case条件表达式,它类似于其他语言中的if/else语句。
1.简单的Case表达式
计算表达式的值,然后依次与WHEN语句中的表达式进行比较,直到匹配上为止。如果未匹配上,则ELSE中的表达式将作为结果。如果ELSE语句不存在,那么将返回null。
语法:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P113_101436.jpg?sign=1739376105-j4hKmwqQCFn3EsvBs2GFNjj27waNaMPl-0-9b3c8ff1a20c66b52461fbaea9edd54c)
参数:
● test:一个有效的表达式。
● value:一个表达式,它的结果将与test表达式的结果进行比较。
● result:如果value表达式能够与test表达式匹配,则它将作为结果表达式。
● default:没有匹配的情况下的默认返回表达式。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P113_101437.jpg?sign=1739376105-QfL0nPrMkkNqsZD7vZ7UP7BPRcPRbHTm-0-1f2135ef70e1cea4771669509e10637d)
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_101443.jpg?sign=1739376105-Ev3sDG4tWXaGZ8gZ0jPcgOZsIiWMntpn-0-9679157055abab483e7d9a8135733834)
2.一般的Case表达式
按顺序判断断言,直到找到true为止,然后对应的结果被返回。如果没有找到,就返回ELSE的值。如果没有ELSE语句,则返回null。
语法:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_102502.jpg?sign=1739376105-3pxvcbphkm0PcdsSfa48ZWXx9A7zb8TX-0-aa692ce43aeb87a0bfa20c5aa3153555)
参数:
● predicate:判断的断言,以找到一个有效的可选项。
● result:如果predicate匹配到,result就作为结果表达式。
● default:没有匹配到情况下,默认返回表达式。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_102503.jpg?sign=1739376105-l67mWVagD1wJ3x8D934URBz5OweRtmkZ-0-85e260b828d3be50047345578d09b040)
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_101446.jpg?sign=1739376105-PJZGnyjIHjxMjfyXU5VQmJrzdtWBooP9-0-2ef849535dab8f60500b8ef2429f54da)