我是雪花新手,并且注意到文本列的排序行为不符合预期。
举一个简单的例子:
select *
from ( values ('ab'), ('aBc'), ('acd') ) t(col1)
order by col1
预期顺序:ab,abc,acd
实际订单: aBc ,ab,acd
我想念什么吗?
谢谢。
答案 0 :(得分:3)
您可以直接在order by子句中使用COLLATE规范。
排序规则使您可以指定在比较值时要使用的以下配置设置:
以下示例使用英语语言环境(en)和不区分大小写(ci)的排序规则:
select *
from ( values ('ab'), ('aBc'), ('acd'), ('Z') ) t(col1)
order by collate(col1, 'en-ci');
返回结果:
ab 银行 光盘 Z
答案 1 :(得分:0)
答案 2 :(得分:0)
这也将在“ a”之前对“ Z”进行排序,因为它首先以ASCII / Unicode顺序排列。您可以使用高级功能订购:
select *
from ( values ('ab'), ('aBc'), ('acd'), ('Z') ) t(col1)
order by col1
要在不区分大小写的情况下进行排序,可以使用上功能或下功能。
select *
from ( values ('ab'), ('aBc'), ('acd'), ('Z') ) t(col1)
order by upper(col1)