gpt4 book ai didi

oracle - 奇怪的 Oracle order By 对 String 的行为带有 * 和 (

转载 作者:行者123 更新时间:2023-12-01 15:21:45 24 4
gpt4 key购买 nike

如果我运行此查询:

select distinct column_value as test 
from table(sys.dbms_debug_vc2coll('AFGHANISTAN','*AFRIQUE','(AUCUN)','ITALIE','**MONDE'))
order by test asc;

我希望:

(AUCUN)
**MONDE
*AFRIQUE
AFGHANISTAN
ITALIE

或者

AFGHANISTAN
ITALIE
*AFRIQUE
**MONDE
(AUCUN)

但这就是我得到的:

AFGHANISTAN
*AFRIQUE
(AUCUN)
ITALIE
**MONDE

所以它看起来好像忽略了 (*完全地。

如果我将 session NLS_SORT 参数从 FRENCH 更改为 BINARY
alter session set NLS_SORT=BINARY;

顺序没问题。

但我真的不应该改变我的客户数据库设置,默认情况下有什么理由得到这个奇怪的订单吗?

我可以通过 JPA 标准 API 做任何事情来获得良好的订单而不改变数据库吗?

编辑:这是用于订单的表达式:
// My Original field expression used for the sort
Expression<String> myFieldExp = root.get("mySortField");
Expression<String> sortExpWithNLSfix = builder.function("nlssort", String.class, myFieldExp , builder.literal("nls_sort=binary"));
myCritQuery.orderBy(builder.asc(sortExpWithNLSfix);

最佳答案

这一定与法语 nls_sort 的工作方式有关。但是,您可以在 order by 中使用 nlssort 函数来更改查询的排序模式,如下所示:

alter session set nls_sort=french;

select distinct column_value as test
from table(sys.dbms_debug_vc2coll ('AFGHANISTAN',
'*AFRIQUE',
'(AUCUN)',
'ITALIE',
'**MONDE'))
order by test asc;

TEST
--------------
AFGHANISTAN
*AFRIQUE
(AUCUN)
ITALIE
**MONDE

select distinct column_value as test
from table(sys.dbms_debug_vc2coll ('AFGHANISTAN',
'*AFRIQUE',
'(AUCUN)',
'ITALIE',
'**MONDE'))
order by nlssort(test, 'nls_sort=binary') asc;

TEST
--------------
(AUCUN)
**MONDE
*AFRIQUE
AFGHANISTAN
ITALIE

关于oracle - 奇怪的 Oracle order By 对 String 的行为带有 * 和 (,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com