【发布时间】:2020-08-28 10:54:37
【问题描述】:
正在将数据库从 Oracle 迁移到 Postgres。我正在尝试在我的应用程序中实现排序行为,其中以数字开头的字母数字标签需要出现在字母之后(在下面的示例中进行了说明)。
我在 Postgres 中尝试了法语排序规则,但无法达到我在 Oracle 中使用 NLS_SORT "french" 获得的相同结果。
发布 Oracle 查询,我需要 Postgres 中的等效项,可以在 DB 中设置一次,以便应用程序以后使用它。
甲骨文:
ALTER SESSION SET NLS_SORT='FRENCH';
ALTER SESSION SET NLS_COMP=LINGUISTIC;
select LABEL from CARBON order by LABEL ;
LABEL
APPLE
BALL
102C
108C
108D
Postgres:
我尝试从 pg_collation 条目 fr-FR-x-icu 创建名为 french 的排序规则,并使用 pgAdmin GUI 更改现有表列,如下所示:
label character varying(255) COLLATE public.french NOT NULL
不走运,我得到了同样的结果。
select LABEL from CARBON order by LABEL ;
LABEL
102C
108C
108D
APPLE
BALL
我也在 Postgres 中尝试了以下查询,它给出了与上面相同的结果。我在 Postgres 中遗漏了什么吗?
select LABEL from CARBON order by LABEL collate "fr_FR"
【问题讨论】:
标签: oracle postgresql collation nls-sort nls-comp