LOWER_ATTRIBUTE_NAMES 函数 - Amazon Redshift

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.