我有一个包含表示版本"版本"的字符串的列,如下所示:
5.14.0
5.10.1
5.1.8
5.1.87
5.1.357
26.3.0
24.1.1
我怎么才能在snowflake里把这些分类呢?请注意,数字排序(我们需要的)不同于简单的字符串排序.
我有一个包含表示版本"版本"的字符串的列,如下所示:
5.14.0
5.10.1
5.1.8
5.1.87
5.1.357
26.3.0
24.1.1
我怎么才能在snowflake里把这些分类呢?请注意,数字排序(我们需要的)不同于简单的字符串排序.
我们在DBT Slack上讨论了这一点-我的建议是通过拆分字符串并将其转换为整数数组来将排序转换移动到order by
.Snowflake本身知道如何按正确的顺序对这些数组进行排序:
select *
from data
order by (
select [y[0]::int, y[1]::int, y[2]::int]
from(
select split(version_number, '.') y
)
);
样本数据:
create table data as
select value version_number
from (table(split_to_table(
$$5.14.0
5.10.1
5.1.8
5.1.87
5.1.357
26.3.0
24.1.1$$, '\n'
)))
;
我们还可以为可重用性创建UDF:
create function string_to_int_array_3(version_number string)
returns array
as
$$
select [y[0]::int, y[1]::int, y[2]::int]
from(
select split(version_number, '.') y
)
$$
;
select *
from data
order by string_to_int_array_3(version_number);