条件表达式函数¶
本文介绍 NebulaGraph 支持的条件表达式函数。
CASE¶
CASE
表达式使用条件来过滤传参。和 openCypher 一样,nGQL 提供两种形式的CASE
表达式:简单形式和通用形式。
CASE
表达式会遍历所有条件,并在满足第一个条件时停止读取后续条件,然后返回结果。如果不满足任何条件,将通过ELSE
子句返回结果。如果没有ELSE
子句且不满足任何条件,则返回NULL
。
简单形式¶
- 语法
CASE <comparer>
WHEN <value> THEN <result>
[WHEN ...]
[ELSE <default>]
END
Caution
CASE
表达式一定要用END
结尾。
参数 | 说明 |
---|---|
comparer |
用于与value 进行比较的值或者有效表达式。 |
value |
和comparer 进行比较,如果匹配,则满足此条件。 |
result |
如果value 匹配comparer ,则返回该result 。 |
default |
如果没有条件匹配,则返回该default 。 |
- 示例
nebula> RETURN \
CASE 2+3 \
WHEN 4 THEN 0 \
WHEN 5 THEN 1 \
ELSE -1 \
END \
AS result;
+--------+
| result |
+--------+
| 1 |
+--------+
nebula> GO FROM "player100" OVER follow \
YIELD properties($$).name AS Name, \
CASE properties($$).age > 35 \
WHEN true THEN "Yes" \
WHEN false THEN "No" \
ELSE "Nah" \
END \
AS Age_above_35;
+-----------------+--------------+
| Name | Age_above_35 |
+-----------------+--------------+
| "Tony Parker" | "Yes" |
| "Manu Ginobili" | "Yes" |
+-----------------+--------------+
通用形式¶
- 语法
CASE
WHEN <condition> THEN <result>
[WHEN ...]
[ELSE <default>]
END
参数 | 说明 |
---|---|
condition |
如果条件condition 为 true,表示满足此条件。 |
result |
condition 为 true,则返回此result 。 |
default |
如果没有条件匹配,则返回该default 。 |
- 示例
nebula> YIELD \
CASE WHEN 4 > 5 THEN 0 \
WHEN 3+4==7 THEN 1 \
ELSE 2 \
END \
AS result;
+--------+
| result |
+--------+
| 1 |
+--------+
nebula> MATCH (v:player) WHERE v.player.age > 30 \
RETURN v.player.name AS Name, \
CASE \
WHEN v.player.name STARTS WITH "T" THEN "Yes" \
ELSE "No" \
END \
AS Starts_with_T;
+---------------------+---------------+
| Name | Starts_with_T |
+---------------------+---------------+
| "Tim Duncan" | "Yes" |
| "LaMarcus Aldridge" | "No" |
| "Tony Parker" | "Yes" |
+---------------------+---------------+
简单形式和通用形式的区别¶
为了避免误用简单形式和通用形式,用户需要了解它们的差异。请参见如下示例:
nebula> GO FROM "player100" OVER follow \
YIELD properties($$).name AS Name, properties($$).age AS Age, \
CASE properties($$).age \
WHEN properties($$).age > 35 THEN "Yes" \
ELSE "No" \
END \
AS Age_above_35;
+-----------------+-----+--------------+
| Name | Age | Age_above_35 |
+-----------------+-----+--------------+
| "Tony Parker" | 36 | "No" |
| "Manu Ginobili" | 41 | "No" |
+-----------------+-----+--------------+
示例本意为当玩家年龄大于 35 时输出Yes
。但是查看输出结果,年龄为 36 时输出的却是No
。
这是因为查询使用了简单形式的CASE
表达式,比较对象是$$.player.age
和$$.player.age > 35
。当年龄为 36 时:
$$.player.age
的值为36
,数据类型为 int。
$$.player.age > 35
的值为true
,数据类型为 boolean。
这两种数据类型无法匹配,不满足条件,因此返回No
。
coalesce()¶
coalesce() 返回所有表达式中第一个非空元素。
语法:coalesce(<expression_1>[,<expression_2>...])
- 返回类型:与原元素类型相同。
示例:
nebula> RETURN coalesce(null,[1,2,3]) as result;
+-----------+
| result |
+-----------+
| [1, 2, 3] |
+-----------+
nebula> RETURN coalesce(null) as result;
+----------+
| result |
+----------+
| __NULL__ |
+----------+
最后更新:
August 14, 2023