Neo4j中字符串类型数据排序不符合预期的问题咨询
Neo4j中字符串类型数据排序不符合预期的问题咨询
嗨,我来帮你捋清楚这个排序问题~
你遇到的情况其实是Unicode编码排序规则在起作用,只是你没注意到开头空格的优先级!
咱们先拆解下核心逻辑:
- 空格的Unicode编码是
U+0020,大写字母C是U+0043,E是U+0045。 - 当你用
ORDER BY xxx DESC(降序)时,Neo4j会按Unicode值从大到小排列:C的编码(0043)比空格(0020)大,所以"Coyote"会排在" Eastern Coyote"前面,这就是你看到的结果。 - 而你想要的[" Eastern Coyote","Coyote"]其实是升序排序的结果——因为空格的编码更小,升序时会排在前面。
给你几个针对性的解决方案:
- 如果你只是想要当前示例的排序效果,直接把排序规则改成
ORDER BY xxx ASC就可以得到你想要的结果; - 如果想忽略字符串开头的空格,按实际单词的字母顺序排序,可以用
trim()函数先清理空格再排序,比如:ORDER BY trim(xxx) ASC; - 要是需要更严谨的排序(避免大小写干扰),还可以结合
lower()函数统一转成小写后排序:ORDER BY lower(trim(xxx)) ASC。
备注:内容来源于stack exchange,提问作者Frank.H
相关产品推荐
相关产品推荐

