条件函数
Amazon S3 Select 和 S3 Glacier Select 支持以下条件函数。
CASE
CASE 表达式是一种条件表达式,类似于其他语言中发现的 if/then/else 语句。CASE 用于指定存在多个条件时的结果。有两种类型的 CASE 表达式:简单和搜索。
在简单 CASE 表达式中,将一个表达式与一个值比较。在找到匹配项时,将应用 THEN 子句中的指定操作。如果未找到匹配项,则应用 ELSE 子句中的操作。
在搜索 CASE 表达式中,基于布尔表达式计算每个 CASE,而且 CASE 语句会返回第一个匹配的 CASE。如果在 WHEN 子句中未找到任何匹配的 CASE,则返回 ELSE 子句中的操作。
语法
目前,Amazon S3 Select 不支持 ORDER BY 或包含新行的查询。请确保使用不带换行符的查询。
用于匹配条件的简单 CASE 语句:
CASE expression WHEN value THEN result [WHEN...] [ELSE result] END
用于计算每个条件的搜索 CASE 语句:
CASE WHEN boolean condition THEN result [WHEN ...] [ELSE result] END
示例
如果您使用 Amazon S3 控制台运行以下示例,并且 CSV 文件包含标题行,请选择 Exclude the first line of CSV data(排除第一行 CSV 数据)。
示例 1:使用简单 CASE 表达式可在查询中将 New York City 替换为 Big Apple。将所有其他城市名称替换为 other。
SELECT venuecity, CASE venuecity WHEN 'New York City' THEN 'Big Apple' ELSE 'other' END FROM S3Object;
查询结果:
venuecity | case -----------------+----------- Los Angeles | other New York City | Big Apple San Francisco | other Baltimore | other ...
示例 2:使用搜索的 CASE 表达式来基于单个门票销售的 PRICEPAID 值分配组编号:
SELECT pricepaid, CASE WHEN CAST(pricepaid as FLOAT) < 10000 THEN 'group 1' WHEN CAST(pricepaid as FLOAT) > 10000 THEN 'group 2' ELSE 'group 3' END FROM S3Object;
查询结果:
pricepaid | case -----------+--------- 12624.00 | group 2 10000.00 | group 3 10000.00 | group 3 9996.00 | group 1 9988.00 | group 1 ...
COALESCE
按顺序评估参数并返回第一个非未知值,即第一个非空或非缺失值。此函数无法传播空值和缺失值。
语法
COALESCE ( expression, expression, ... )
参数
- expression
-
对其执行函数的目标表达式。
示例
COALESCE(1) -- 1 COALESCE(null) -- null COALESCE(null, null) -- null COALESCE(missing) -- null COALESCE(missing, missing) -- null COALESCE(1, null) -- 1 COALESCE(null, null, 1) -- 1 COALESCE(null, 'string') -- 'string' COALESCE(missing, 1) -- 1
NULLIF
指定两个表达式,如果两个表达式的计算结果为相同值,则返回空;否则返回第一个表达式的计算结果。
语法
NULLIF ( expression1, expression2 )
参数
- expression1,expression2
-
对其执行函数的目标表达式。
示例
NULLIF(1, 1) -- null NULLIF(1, 2) -- 1 NULLIF(1.0, 1) -- null NULLIF(1, '1') -- 1 NULLIF([1], [1]) -- null NULLIF(1, NULL) -- 1 NULLIF(NULL, 1) -- null NULLIF(null, null) -- null NULLIF(missing, null) -- null NULLIF(missing, missing) -- null