3.2.5 运算符
3.2.5.1 数学运算符
数学运算符包括+、-、*、/、%和^。
3.2.5.2 比较运算符
比较运算符包括=、<>、<、>、<=、>=、IS NULL和IS NOT NULL。
3.2.5.3 布尔运算符
布尔运算符包括AND、OR、XOR和NOT。
3.2.5.4 字符串运算符
连接字符串的运算符为+,正则表达式的匹配运算符为=~。
3.2.5.5 列表运算符
列表的连接也可以通过+运算符,可以用IN来检查列表中是否存在某个元素。
3.2.5.6 属性运算符
Cypher 2.0版本以后,之前存在的属性运算符“?”和“!”已经被移除了。这个语法不再支持。对于不存在的属性将返回null。如果真的还需要?运算符的功能,可以使用(NOT(has(<ident>.prop))OR <ident>.prop=<value>)。使用“? ”表达可选关系也被移除了,取而代之的是OPTINAL MATCH。
3.2.5.7 值的相等与比较
Cypher支持使用=和<>来比较两个值的相等/不相等关系,如3 = 3和"x" <> "xy"。
对于Map来说,只有两个Map的键相同且指向的值也相等的时候它们才相等。对于列表来说,只有它们包含相等值的相同序列的时候才相等,如[3, 4] = [1+2, 8/2]。
不同类型的值在比较相等的时候遵循以下规则:
● 路径可看作是一些节点和关系的列表,它等于所有包含相同序列节点和关系的所有列表。
● 对任何值使用=和<> null都将返回null,包括null = null和null <> null都将返回null。唯一可靠地测试一个值是否为null的方法是使用IS NULL或者IS NOT NULL。
不同类型之间不能相互比较。节点、关系和映射之间也不能相互比较。
3.2.5.8 值的排序与比较
比较运算符<=、<(升序)和>=、>(降序)可以用于如下值排序比较:
● 数字型值的排序比较采用数字顺序。
● java.lang.Double.NaN大于所有值。
● 字符串排序的比较采用字典顺序,如"x" < "xy"。
● 布尔值的排序遵循false < true。
● 只要有一个参数为null,比较结果都将为null,如null < 3的结果为null。
● 将其他类型的值相互比较进行排序,则会报错。
3.2.5.9 链式比较运算
比较运算可以被任意地联结在一起,如x < y <= z等价于x < y AND y <= z。
如果a, b, c, …, y, z是表达式,op1, op2, …, opN是比较运算符,这时,a op1 b op2 c … y opN z等价于a op1 b and b op2 c and … y opN z。
例如:
等价于:
该查询将匹配年龄介于21~30的所有节点。