switch
switch
在一组文本标签和 return-expression 配对中,将 condition-expression 与文本标签进行比较。然后,它返回与第一个等于 condition-expression 的文本标签相对应的 return-expression。如果没有等于 condition-expression 的标签,则 switch
返回 default-expression。每个 return-expression 和 default-expression 必须具有相同的数据类型。
语法
switch(
condition-expression
,label-1
,return-expression-1
[,label-n
,return-expression-n
...],default-expression
)
Arguments
switch
需要一个或多个 if/then 表达式对,else 参数只需要一个表达式。
- condition-expression
-
要与标签文本进行比较的表达式。它可以是字段名称(如
address
)、文本值(如“Unknown
”)或其他函数(如toString(salesAmount)
)。 - label
-
要与 condition-expression 参数进行比较的文本,所有文本的数据类型都必须与 condition-expression 参数相同。
switch
最多可接受 5000 个标签。 - return-expression
-
其标签的值等于 condition-expression 的值时返回的表达式。它可以是字段名称(如
address
)、文本值(如“Unknown
”)或其他函数(如toString(salesAmount)
)。所有 return-expression 参数必须与 default-expression 具有相同的数据类型。 - default-expression
-
任何标签参数的值都不等于 condition-expression 的值时返回的表达式。它可以是字段名称(如
address
)、文本值(如“Unknown
”)或其他函数(如toString(salesAmount)
)。default-expression 必须与所有 return-expression 参数具有相同的数据类型。
返回类型
switch
返回与 return-expression 中的值具有相同数据类型的值。return-expression 和 default-expression 返回的所有数据都必须是相同的数据类型或转换为相同的数据类型。
一般示例
以下示例返回输入区域名称的 AWS 区域 代码。
switch(region_name, "US East (N. Virginia)", "us-east-1", "Europe (Ireland)", "eu-west-1", "US West (N. California)", "us-west-1", "other regions")
以下是给定的字段值。
"US East (N. Virginia)" "US West (N. California)" "Asia Pacific (Tokyo)"
对于这些字段值,将返回以下值。
"us-east-1" "us-west-1" "other regions"
使用 switch 替换 ifelse
以下 ifelse
用例等同于前面的示例,当 ifelse
评估一个字段的值是否等于不同的文本值时,改用 switch
是更好的选择。
ifelse(region_name = "US East (N. Virginia)", "us-east-1", region_name = "Europe (Ireland)", "eu-west-1", region_name = "US West (N. California)", "us-west-1", "other regions")
表达式作为返回值
以下示例在 return-expressions 中使用表达式:
switch({origin_city_name}, "Albany, NY", {arr_delay} + 20, "Alexandria, LA", {arr_delay} - 10, "New York, NY", {arr_delay} * 2, {arr_delay})
前面的示例更改了从特定城市起飞的每个航班的预期延误时间。