LOWER_ATTRIBUTE_NAMES 函数
使用与 LOWER 函数相同的大小写转换例程,将 SUPER 值中的所有适用属性名称转换为小写。LOWER_ATTRIBUTE_NAMES 支持 UTF-8 多字节字符,每个字符最多可以有 4 个字节。
要将 SUPER 属性名称转换为大写,请使用 UPPER_ATTRIBUTE_NAMES 函数。
语法
LOWER_ATTRIBUTE_NAMES(super_expression)
参数
- super_expression
-
SUPER 表达式。
返回类型
SUPER
使用说明
在 Amazon Redshift 中,列标识符传统上不区分大小写且转换为小写。如果您从区分大小写的数据格式(例如 JSON)中提取数据,则数据可能包含大小写混合的属性名称。
考虑以下示例。
CREATE TABLE t1 (s) AS SELECT JSON_PARSE('{"AttributeName": "Value"}'); SELECT s.AttributeName FROM t1;
attributename ------------- NULL
SELECT s."AttributeName" FROM t1;attributename ------------- NULL
Amazon Redshift 对这两个查询都返回 NULL。要查询 AttributeName
,请使用 LOWER_ATTRIBUTE_NAMES 将数据的属性名称转换为小写。考虑以下示例。
CREATE TABLE t2 (s) AS SELECT LOWER_ATTRIBUTE_NAMES(s) FROM t1; SELECT s.attributename FROM t2;
attributename ------------- "Value"
SELECT s.AttributeName FROM t2;attributename ------------- "Value"
SELECT s."attributename" FROM t2;attributename ------------- "Value"
SELECT s."AttributeName" FROM t2;attributename ------------- "Value"
用于处理大小写混合的对象属性名称的一个相关选项是 enable_case_sensitive_super_attribute
配置选项,它让 Amazon Redshift 可以识别 SUPER 属性名称中的大小写。这可能是使用 LOWER_ATTRIBUTE_NAMES 的替代解决方案。有关 enable_case_sensitive_super_attribute
的更多信息,请转至 enable_case_sensitive_super_attribute。
示例
将 SUPER 属性名称转换为小写
以下示例使用 LOWER_ATTRIBUTE_NAMES 来转换表中所有 SUPER 值的属性名称。
-- Create a table and insert several SUPER values. CREATE TABLE t (i INT, s SUPER); INSERT INTO t VALUES (1, NULL), (2, 'A'::SUPER), (3, JSON_PARSE('{"AttributeName": "B"}')), (4, JSON_PARSE( '[{"Subobject": {"C": "C"}, "Subarray": [{"D": "D"}, "E"] }]')); -- Convert all attribute names to lowercase. UPDATE t SET s = LOWER_ATTRIBUTE_NAMES(s); SELECT i, s FROM t ORDER BY i;
i | s ---+-------------------------------------------------- 1 | NULL 2 | "A" 3 | {"attributename":"B"} 4 | [{"subobject":{"c":"C"},"subarray":[{"d":"D"}, "E"]}]
观察 LOWER_ATTRIBUTE_NAMES 的工作原理。
NULL 值和标量 SUPER 值(例如
"A"
)保持不变。在 SUPER 对象中,所有属性名称都更改为小写,但诸如
"B"
之类的属性值保持不变。LOWER_ATTRIBUTE_NAMES 以递归方式应用于嵌套在 SUPER 数组或其它对象内的任何 SUPER 对象。
在具有重复属性名称的 SUPER 对象上使用 LOWER_ATTRIBUTE_NAMES
如果 SUPER 对象包含的属性的名称仅在大小写上有所不同,则 LOWER_ATTRIBUTE_NAMES 将引发错误。考虑以下示例。
SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));
error: Invalid input code: 8001 context: SUPER value has duplicate attributes after case conversion.