假设我有一个包含两列的简单表格:id (int) 和 name (varchar)。在此表中,我存储了一些波兰语名称,例如:
1 | sępoleński
2 | świecki
3 | toruński
4 | Włocławek
现在,假设我想按名称对结果进行排序:
SELECT * FROM table ORDER BY name;
如果我有 C 语言环境,我会得到:
4 | Włocławek
1 | sępoleński
3 | toruński
2 | świecki
这是错误的,因为“ś”应该在“s”之后和“t”之前。如果我使用波兰语语言环境 (pl_PL.UTF-8),我会得到:
1 | sępoleński
2 | świecki
3 | toruński
4 | Włocławek
这也不是我想要的,因为我希望名称以大写字母开头,就像在 C 语言环境中一样,如下所示:
4 | Włocławek
1 | sępoleński
2 | świecki
3 | toruński
我该怎么做?
最佳答案
如果您想要自定义排序,您必须定义一些函数以某种方式修改您的值,以便修改后的值的自然排序符合您的要求。
例如,您可以追加一些字符或将值以大写开头的字符串:
CREATE OR REPLACE FUNCTION mysort(text) returns text IMMUTABLE as $$
SELECT CASE WHEN substring($1 from 1 for 1) =
upper( substring($1 from 1 for 1)) then 'AAAA' || $1 else $1 END
;
$$ LANGUAGE SQL;
然后
SELECT * FROM table ORDER BY mysort(name);
这不是傻瓜式的(您可能想将“AAA”更改为更合适的内容),当然会影响性能。
关于sql - PostgreSQL 中的自定义排序(排序依据),与语言环境无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4381743/