如果我运行此查询:
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
所以它看起来完全忽略了(
和*
。
如果我将会话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);
答案 0 :(得分:2)
这必须与法国nls_sort的工作方式有关。但是,您可以按顺序使用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