首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本上的雪花排序似乎不正确

问文本上的雪花排序似乎不正确
EN

Stack Overflow用户
提问于 2020-08-28 16:16:21
回答 3查看 605关注 0票数 1

我对雪花很陌生,并且注意到文本列上的排序不像预期的那样。

以这个简单的例子为例:

代码语言:javascript
复制
select *
    from ( values ('ab'), ('aBc'), ('acd') ) t(col1)
order by col1

预期订单: ab,aBc,acd

实际订单:aBc ab acd

我是不是遗漏了什么?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-08-31 14:29:21

您可以直接在order子句中使用COLLATE规范。

排序规则允许您指定在比较值时使用的下列配置设置:

  • 现场
  • 案件敏感性
  • 重音敏感
  • 标点符号敏感性
  • 首字母优先
  • 案例转换
  • 空间修整

下面的示例使用英语语言环境(En)和大小写不敏感(Ci)排序规则:

代码语言:javascript
复制
select *
    from ( values ('ab'), ('aBc'), ('acd'), ('Z') ) t(col1)
   order by collate(col1, 'en-ci');

返回的结果:

ab aBc acd

票数 4
EN

Stack Overflow用户

发布于 2020-08-28 16:56:29

根据文档

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

在ASCII表中,B先于b。

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

票数 0
EN

Stack Overflow用户

发布于 2020-08-28 17:00:29

这也将排序"Z“之前的"a”,因为它是第一个按ASCII / Unicode顺序。您可以使用上面的函数进行排序:

代码语言:javascript
复制
select *
    from ( values ('ab'), ('aBc'), ('acd'), ('Z') ) t(col1)
order by col1

若要在不区分大小写的情况下进行排序,可以使用上函数或下函数。

代码语言:javascript
复制
select *
    from ( values ('ab'), ('aBc'), ('acd'), ('Z') ) t(col1)
order by upper(col1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63637509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档