文字上的雪花排序似乎不正确

时间:2020-08-28 16:16:21

标签: snowflake-cloud-data-platform

我是雪花新手,并且注意到文本列的排序行为不符合预期。

举一个简单的例子:

select *
    from ( values ('ab'), ('aBc'), ('acd') ) t(col1)
order by col1

预期顺序:ab,abc,acd

实际订单: aBc ,ab,acd

我想念什么吗?

谢谢。

3 个答案:

答案 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)

根据ASCII table

所有数据均根据ASCII表中每个字符的数字字节值进行排序。支持UTF-8编码。

在{{3}}中,Bb之前。

奇怪的是,order by没有考虑排序中的字符串长度。

答案 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)