假设我在雪花表列中有两个字符串。
val |
---|
“000000001bb1304f” |
“000000001bb13059” |
我试图了解 MAX() 如何处理这些值。它是否将每个字符串分解为其默认编码值(假设 Snowflake 默认使用特定编码,如 utf-8 用于 STRING 数据类型)并对总字符串值求和?
在我的示例中,我收到“000000001bb13059”作为“最大字符串”值,但想了解这是如何决定的。
示例雪花sql代码:
-- direct comparison among strings
-- result is true
select '000000001bb1304f' < '000000001bb13059';
-- using MAX()
create temporary table test (val STRING);
insert into test values('000000001bb1304f');
insert into test values('000000001bb13059');
-- max val is '000000001bb13059'
select max(val) from test;
字符串比较通过比较每个字符的 ascii 值来工作——从左到右。你的两个字符串是相同的,直到你有'4'和'5'的倒数第二个字符,所以带有'5'的字符串更大,所以它由 MAX 值返回。
顺便说一句,这是大多数系统中字符串比较的工作方式,它并不特定于 Snowflake