首页 > 解决方案 > Heroku PostgreSQL 按字母顺序按点在前

问题描述

如何按字母顺序排列并在第一位得到一个点的结果

询问:

SQL SELECT name FROM article ORDER BY name;

**and the result is:**

GitFlow GithubFlow .gitignore Handover 增量迁移


...but I want to have `.gitignore` first.

**Expected result:**

.gitignore GitFlow GithubFlow Handover 增量迁移





**//update:**

**Correct query is:**
SQL
SELECT name FROM articles ORDER BY name::bytea;

来源:Postgresql 9.4 中带有空格的排序/整理/顺序不正确

...但我不知道为什么,你能解释一下吗?

//编辑1:

我也需要先对其他非字母字符进行排序。(例如 $-_# ...)

标签: sqlpostgresqlherokusql-order-by

解决方案


我希望以下内容能最好地满足您的需求:

ORDER BY
   NOT starts_with(name, '.'),
   name COLLATE "C"

这将首先对“点文件”进行排序,因为FALSE < TRUE在这些组中,名称按二进制顺序排序(例如,大写字母在小写字母之前)。

COLLATE "C"的效果和你的演员一样,只是更便宜。

您的查询(在某种程度上)实现了您想要的,因为 ASCII 值.小于所有字母的 ASCII 值。

如果您希望将名称按自然语言顺序排序(例如albe < Simek),请删除COLLATE我的答案中的子句。


推荐阅读