Order by столбца типа varchar2. какова максимальная длина строки?

HelpMePls
Дата: 29.10.2015 10:00:27
при сортировке по столбцу столбец_varchar2 с типом VARCHAR2(2000 char).

DENSE_RANK () OVER ( ORDER BY столбец_varchar2 )

было замечено, что две строки одна длиной 1949 символов, а вторая 1923 символов, функция DENSE_RANK посчитала их одинаковыми, т.е. присвоила один и тот же ранк.
вначале они одинаковые и только в конце различаются.


Вопрос:
какова должна быть максимальная длина строки для ORDER BY?
нлссорт
Дата: 29.10.2015 10:21:17
HelpMePls,

4000 байтов, но при небинари нлссорте это 1000 символов независимо от кодировки.
HelpMePls
Дата: 29.10.2015 10:34:07
HelpMePls,

при
ALTER SESSION SET NLS_SORT = 'BINARY'

работает нормально.

а при

ALTER SESSION SET NLS_SORT = 'RUSSIAN'

не работает.


что делать? :)
HelpMePls
Дата: 29.10.2015 10:35:17
нлссорт
HelpMePls,

4000 байтов, но при небинари нлссорте это 1000 символов независимо от кодировки.


то есть нужно проставить?

ALTER SESSION SET NLS_SORT = 'BINARY'

а можно еще ссылку на документацию.
AlexFF__|
Дата: 29.10.2015 10:37:14
HelpMePls
нлссорт
HelpMePls,

4000 байтов, но при небинари нлссорте это 1000 символов независимо от кодировки.


то есть нужно проставить?

ALTER SESSION SET NLS_SORT = 'BINARY'

а можно еще ссылку на документацию.

или
order by nlssort
Elic
Дата: 29.10.2015 10:39:40
HelpMePls
что делать?
RTFM NLSSORT (FAQ):
Currently, the only way to guarantee precise linguistic comparison results is to not compare character values that are longer than 499 characters for monolingual collations and 249 characters for multilingual collations.
HelpMePls
Дата: 29.10.2015 10:56:53
вот так не работает

with t as (
select 1 as id, RPAD('Я',999,'Я') as col from dual
union all
select 2 as id, RPAD('Я',999,'Я') as col from dual
union all
select 3 as id, RPAD('Я',999,'Я') || RPAD('Э',100,'Э') as col from dual
)
select 
DENSE_RANK () OVER ( ORDER BY NLSSORT(col,'NLS_SORT = BINARY') ) as rank_str
,length(col) as len
,id, col
from t
order by id
;



а так работает

with t as (
select 1 as id, RPAD('Я',1000,'Я') as col from dual
union all
select 2 as id, RPAD('Я',1000,'Я') as col from dual
union all
select 3 as id, RPAD('Я',1000,'Я') || RPAD('Э',100,'Э') as col from dual
)
select 
DENSE_RANK () OVER ( ORDER BY NLSSORT(col,'NLS_SORT = BINARY') ) as rank_str
,length(col) as len
,id, col
from t
order by id
;



кто-нибудь может объяснить?
сортир
Дата: 29.10.2015 10:58:57
HelpMePls
что делать?
substr, substr, substr, substr
Elic
Дата: 29.10.2015 10:59:34
HelpMePls
кто-нибудь может объяснить?
Ты по-аглицки не понимаешь?
flush shared_сортир
Дата: 29.10.2015 11:00:55
HelpMePls
кто-нибудь может объяснить?
нечистый эксперимент.