"order by" postgres 和 oracle 有不同的结果
"order by" postgres and oracle have different results
当我使用 oracle 数据库中的 varchar 字段进行“排序依据”时
这是结果
数据:
1>33
1>31>33
1>31
112
11
1
有什么办法可以达到下面想要的效果
数据:
112
11
1>33
1>31>33
1>31
1
对于 postgres,它工作得很好,但对于其他数据库,它不能正常工作
如果有人可以帮助我,非常感谢
Oracle_19
Postgres_13
来源:
create table test(
data char(50)
)
insert into test values('112');
insert into test values('11');
insert into test values('1>33');
insert into test values('1>31>33');
insert into test values('1>31');
insert into test values('1');
select * from test order by data desc
我不假装对排序规则有很多了解,但是您可以使用 UCA collation and variable characters and weighting 在 Oracle 中获得您想要的结果,或者对于特定的查询 nlssort()
:
select * from test order by nlssort(data, 'NLS_SORT=UCA0700_DUCET_VN') desc
或通过设置 NLS_SORT 会话(或系统)参数:
alter session set nls_sort = UCA0700_DUCET_VN;
select * from test order by data desc
两者都给出了你想要的结果:
DATA
----------
112
11
1>33
1>31>33
1>31
1
大概您的 PostgreSQL 环境配置为执行类似操作。
从未使用过 PostgreSQL,但看起来这个排序规则也是一样的:
select * from test order by data collate "vi-VN-x-icu" desc
当我使用 oracle 数据库中的 varchar 字段进行“排序依据”时 这是结果 数据:
1>33
1>31>33
1>31
112
11
1
有什么办法可以达到下面想要的效果 数据:
112
11
1>33
1>31>33
1>31
1
对于 postgres,它工作得很好,但对于其他数据库,它不能正常工作
如果有人可以帮助我,非常感谢
Oracle_19
Postgres_13
来源:
create table test(
data char(50)
)
insert into test values('112');
insert into test values('11');
insert into test values('1>33');
insert into test values('1>31>33');
insert into test values('1>31');
insert into test values('1');
select * from test order by data desc
我不假装对排序规则有很多了解,但是您可以使用 UCA collation and variable characters and weighting 在 Oracle 中获得您想要的结果,或者对于特定的查询 nlssort()
:
select * from test order by nlssort(data, 'NLS_SORT=UCA0700_DUCET_VN') desc
或通过设置 NLS_SORT 会话(或系统)参数:
alter session set nls_sort = UCA0700_DUCET_VN;
select * from test order by data desc
两者都给出了你想要的结果:
DATA
----------
112
11
1>33
1>31>33
1>31
1
大概您的 PostgreSQL 环境配置为执行类似操作。
从未使用过 PostgreSQL,但看起来这个排序规则也是一样的:
select * from test order by data collate "vi-VN-x-icu" desc