Postgres中的Oracle nls_sort等效项>>

问题描述 投票:1回答:1

正在将数据库从Oracle迁移到Postgres。我正在尝试实现应用程序中的排序行为,其中需要将以数字开头的字母数字标签放在字母后面(在下面的示例中进行说明)。

我在Postgres中尝试了法语排序规则,但是无法达到使用NLS_SORT "french"在Oracle中获得的相同结果。

发布Oracle查询,我需要一个Postgres中的等效项,该等效项可以在DB中设置一次,以便应用程序以后使用它。

Oracle:

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:

我尝试通过从french条目pg_collation创建名为fr-FR-x-icu的排序规则,并使用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迁移到Postgres。我正在尝试实现应用程序中的排序行为,在该行为中,需要在字母后面加上数字开头的字母数字标签(在...

oracle postgresql collation nls-sort nls-comp
1个回答
0
投票

您可以通过创建自定义ICU排序规则(可从PostgreSQL v10开始使用)来解决此问题,该排序规则对大于拉丁字符的数字进行排序:

© www.soinside.com 2019 - 2024. All rights reserved.