可以使用构造在 Cypher® 中表达通用条件表达式。 Cypher 中存在两种变体:简单形式,用于将单个表达式与多个值进行比较,以及泛型形式,用于表示多个条件语句。CASE
CASE
CREATE
(alice:Person {name:'Alice', age: 38, eyes: 'brown'}),
(bob:Person {name: 'Bob', age: 25, eyes: 'blue'}),
(charlie:Person {name: 'Charlie', age: 53, eyes: 'green'}),
(daniel:Person {name: 'Daniel', eyes: 'brown'}),
(eskil:Person {name: 'Eskil', age: 41, eyes: 'blue'}),
(alice)-[:KNOWS]->(bob),
(alice)-[:KNOWS]->(charlie),
(bob)-[:KNOWS]->(daniel),
(charlie)-[:KNOWS]->(daniel),
(bob)-[:MARRIED]->(eskil)
简单CASE
简单形式用于将单个表达式与多个值进行比较,类似于编程语言的构造。 运算符计算表达式,直到找到匹配项。 如果未找到匹配项,则返回运算符中的表达式。 如果没有案例,也没有找到匹配项,将退回。CASE
switch
WHEN
ELSE
ELSE
null
语法
CASE test
WHEN value [, value]* THEN result
[WHEN ...]
[ELSE default]
END
例子
MATCH (n:Person)
RETURN
CASE n.eyes
WHEN 'blue' THEN 1
WHEN 'brown', 'hazel' THEN 2
ELSE 3
END AS result, n.eyes
扩展简单CASE
扩展的简单形式允许显式指定比较运算符。简单使用 隐含等于 () 比较器。CASE
CASE
=
支持的比较器包括:
-
常规比较运算符:、、、、、、
=
<>
<
>
<=
>=
-
IS NULL 运算符:
IS [NOT] NULL
-
类型谓词表达式:(请注意,不接受该表单)
IS [NOT] TYPED <TYPE>
IS [NOT] :: <TYPE>
-
规范化谓词表达式:
IS [NOT] NORMALIZED
-
字符串比较运算符:、、(正则表达式匹配)
STARTS WITH
ENDS WITH
=~
CASE test
WHEN [comparisonOperator] value [, [comparisonOperator] value ]* THEN result
[WHEN ...]
[ELSE default]
END
名字 | 描述 |
---|---|
| 表达式。 |
| 支持的比较运算符之一。 |
| 一个表达式,其结果与使用给定的比较运算符进行比较。 |
| 如果与 匹配,则作为输出返回的表达式。 |
| 如果没有与测试表达式匹配的值,则要返回的表达式。 |
MATCH (n:Person)
RETURN n.name,
CASE n.age
WHEN IS NULL, IS NOT TYPED INTEGER | FLOAT THEN "Unknown"
WHEN = 0, = 1, = 2 THEN "Baby"
WHEN <= 13 THEN "Child"
WHEN < 20 THEN "Teenager"
WHEN < 30 THEN "Young Adult"
WHEN > 1000 THEN "Immortal"
ELSE "Adult"
END AS result
通用CASE
泛型表达式支持多个条件语句,类似于编程语言的构造。 每一行都按顺序计算,直到找到值。 如果未找到匹配项,则返回运算符中的表达式。 如果没有案例,也没有找到匹配项,将退回。CASE
if-elseif-else
true
ELSE
ELSE
null
CASE
WHEN predicate THEN result
[WHEN ...]
[ELSE default]
END
MATCH (n:Person)
RETURN
CASE
WHEN n.eyes = 'blue' THEN 1
WHEN n.age < 40 THEN 2
ELSE 3
END AS result, n.eyes, n.age
CASE
带值null
使用值时,可能会强制使用泛型形式。 下面的两个示例使用节点的属性(该属性具有值)来阐明差异。null
CASE
age
Daniel
null
RETURN n.name,
CASE n.age
WHEN null THEN -1
ELSE n.age - 10
END AS age_10_years_ago
RETURN n.name,
CASE
WHEN n.age IS NULL THEN -1
ELSE n.age - 10
END AS age_10_years_ago
CASE
表达式和后续子句
WITH n,
CASE n.eyes
WHEN 'blue' THEN 1
WHEN 'brown' THEN 2
ELSE 3
END AS colorCode
SET n.colorCode = colorCode
RETURN n.name, n.colorCode