【图形数据库】条件表达式 (CASE)

可以使用构造在 Cypher® 中表达通用条件表达式。 Cypher 中存在两种变体:简单形式,用于将单个表达式与多个值进行比较,以及泛型形式,用于表示多个条件语句。CASECASE

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

简单形式用于将单个表达式与多个值进行比较,类似于编程语言的构造。 运算符计算表达式,直到找到匹配项。 如果未找到匹配项,则返回运算符中的表达式。 如果没有案例,也没有找到匹配项,将退回。CASEswitchWHENELSEELSEnull

语法

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

扩展的简单形式允许显式指定比较运算符。简单使用 隐含等于 () 比较器。CASECASE=

支持的比较器包括:

CASE test
  WHEN [comparisonOperator] value [, [comparisonOperator] value ]* THEN result
  [WHEN ...]
  [ELSE default]
END

名字描述

test

表达式。

comparisonOperator

支持的比较运算符之一。

value

一个表达式,其结果与使用给定的比较运算符进行比较。test

result

如果与 匹配,则作为输出返回的表达式。valuetest

default

如果没有与测试表达式匹配的值,则要返回的表达式。

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

泛型表达式支持多个条件语句,类似于编程语言的构造。 每一行都按顺序计算,直到找到值。 如果未找到匹配项,则返回运算符中的表达式。 如果没有案例,也没有找到匹配项,将退回。CASEif-elseif-elsetrueELSEELSEnull

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

使用值时,可能会强制使用泛型形式。 下面的两个示例使用节点的属性(该属性具有值)来阐明差异。nullCASEageDanielnull

MATCH (n:Person)
RETURN n.name,
CASE n.age
  WHEN null THEN -1
  ELSE n.age - 10
END AS age_10_years_ago
MATCH (n:Person)
RETURN n.name,
CASE
  WHEN n.age IS NULL THEN -1
  ELSE n.age - 10
END AS age_10_years_ago

CASE表达式和后续子句

MATCH (n:Person)
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值