![精通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=1738850321-8nLPTdCJ6jChjNzbNUw4oELqPJKmIio7-0-1aba04deab79170f87293c739c64aff2)
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=1738850321-R4oJkgs4g1BWdAUotha6wAjERm3OJaHj-0-562717bca2223e7ba22aef7512fde91b)
参数:
● test:一个有效的表达式。
● value:一个表达式,它的结果将与test表达式的结果进行比较。
● result:如果value表达式能够与test表达式匹配,则它将作为结果表达式。
● default:没有匹配的情况下的默认返回表达式。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P113_101437.jpg?sign=1738850321-cYsaJG0qgehlX1Nzw6eJ139IUrkU7fRd-0-570418e7b54f4b1ed93604187770809f)
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_101443.jpg?sign=1738850321-XoPrIb8nMsCfdVIv17iaBNdLwD7JSca5-0-7f295de5c474c46dccd0b8cca07f7167)
2.一般的Case表达式
按顺序判断断言,直到找到true为止,然后对应的结果被返回。如果没有找到,就返回ELSE的值。如果没有ELSE语句,则返回null。
语法:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_102502.jpg?sign=1738850321-tCwo08RX53vmID9fOCEOzf6KgRNeHxJY-0-dd87a60b015e2fbcd08cc6a7524d390a)
参数:
● predicate:判断的断言,以找到一个有效的可选项。
● result:如果predicate匹配到,result就作为结果表达式。
● default:没有匹配到情况下,默认返回表达式。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_102503.jpg?sign=1738850321-Z3ZL8QuC73uPLHL7iv0eXYbC5aZy7PWr-0-4ca61c1c31b3e3c1419af4217d31e638)
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P114_101446.jpg?sign=1738850321-RLLj23ORuSq2Vujzq628FbXpioJzKhkM-0-929e0b302495c6901bc02a48ed8c62a4)