powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить "умную" сортировку?
21 сообщений из 21, страница 1 из 1
Как отключить "умную" сортировку?
    #37016861
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT *
FROM (
              SELECT 'c'   t FROM dual
    UNION ALL SELECT '(n)'   FROM dual
    UNION ALL SELECT 'r'     FROM dual
  ) t
ORDER BY t.t ASC
tc(n)r
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016864
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
alter session set nls_sort=binary_ci;

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016869
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov,

а так будет идти сортировка с учетом особенностей национального алфавита? Мне хочется, чтобы он просто не пропускал скобку и ставил такие записи в начало...
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016874
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
order by replace(t.t, '(')
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016875
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
брадобрей,

это не серьезно (c).
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016882
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
ORDER BY NLSSORT(t.t, 'NLS_SORT = BINARY') ASC
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016895
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Alex_SMIRNOV_, Denis Popov,

спасибо.
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016905
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym_Alex_SMIRNOV_, Denis Popov,

спасибо.
а мне
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #37016908
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
брадобрей,

спасибо за участие.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как отключить "умную" сортировку?
    #40112305
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такой вопрос по сортировке символьных полей. Нужно сортировать сначала по спецсимволам, затем по цифрам, затем по английским буквам и после этого по русским буквам. По буквам - без учёта регистра.

Я пробовал следующие варианты:
BINARY_CI: некорректно сортирует русские буквы - буква ё - идёт после я (Я),
RUSSIAN_CI: после спецсимволов идут не цифры, а английские буквы,
GENERIC_BASELETTER_CI: русские буквы идут в неправильном порядке,
GERMAN_CI: после спецсимволов идут не цифры, а русские буквы.

Тест:
авторselect name_short
from
(select '(!)' name_short from dual union all
select '1' from dual union all
select '208' from dual union all
select 'б' from dual union all
select 'еёеё' from dual union all
select 'ЕЁЕЁ' from dual union all
select 'ёеё' from dual union all
select 'Щёеё' from dual union all
select 'www' from dual union all
select 'WWW' from dual union all
select 'www' from dual)
order by NLSSORT(name_short, 'NLS_SORT=RUSSIAN_CI')

Ещё я читал про Oracle Locale Builder, но хотел бы узнать, можно ли каким-либо образом в данном случае обойтись без него?
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112307
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

Код: plsql
1.
order by translate(from, what, to)
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112311
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
Pastic,

Код: plsql
1.
order by translate(from, what, to)



А как её применить в данном случае?
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112337
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
SQL> select name_short
  2  from
  3  (select '(!)' name_short from dual union all
  4  select '1' from dual union all
  5  select '208' from dual union all
  6  select 'б' from dual union all
  7  select 'еёеё' from dual union all
  8  select 'яёеё' from dual union all
  9  select 'ЕЁЕЁ' from dual union all
 10  select 'ёеё' from dual union all
 11  select 'Щёеё' from dual union all
 12  select 'щёеё' from dual union all
 13  select 'Йёеё' from dual union all
 14  select 'иёеё' from dual union all
 15  select 'Иёеё' from dual union all
 16  select 'йёеё' from dual union all
 17  select 'www' from dual union all
 18  select 'WWW' from dual union all
 19  select 'www' from dual)
 20  order by NLSSORT(name_short, 'NLS_SORT=UCA0700_DUCET_CI')
 21  ;

NAME_SHORT
----------
(!)
1
208
WWW
www
www
б
ёеё
ЕЁЕЁ
еёеё
иёеё
Иёеё
йёеё
Йёеё
Щёеё
щёеё
яёеё

17 rows selected


SQL> 
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112342
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
SQL> select name_short
  2  from
  3  (select '(!)' name_short from dual union all
  4  select '1' from dual union all
  5  select '208' from dual union all
  6  select 'б' from dual union all
  7  select 'еёеё' from dual union all
  8  select 'яёеё' from dual union all
  9  select 'ЕЁЕЁ' from dual union all
 10  select 'ёеё' from dual union all
 11  select 'Щёеё' from dual union all
 12  select 'щёеё' from dual union all
 13  select 'Йёеё' from dual union all
 14  select 'иёеё' from dual union all
 15  select 'Иёеё' from dual union all
 16  select 'йёеё' from dual union all
 17  select 'www' from dual union all
 18  select 'WWW' from dual union all
 19  select 'www' from dual)
 20  order by NLSSORT(name_short, 'NLS_SORT=UCA0700_DUCET_CI')
 21  ;

NAME_SHORT
----------
(!)
1
208
WWW
www
www
б
ёеё
ЕЁЕЁ
еёеё
иёеё
Иёеё
йёеё
Йёеё
Щёеё
щёеё
яёеё

17 rows selected


SQL> 



Спасибо, это почти то, что нужно - от требуемого варианта эта сортировка отличается лишь тем, что там буква "ё" находится не между "е" и "ж", а между "д" и "е".
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112351
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic


А как её применить в данном случае?


если нет подходящего нлс_сорт


Нужно сортировать
order by
translate(str,'не спецсимвол','**************') --по спецсимволам
,translate(str,'не цифры','00000000000') -- затем по цифрам
,translate(str,'не анг буквы','sssssssssssss') -- затем по английским буквам
,translate(str,'не рус буквы','шшшшшшшшшшш') --и после этого по русским буквам.

+upper/lower --По буквам - без учёта регистра.

ps
вместо translate регулярку

pss
упорядочивать по функции

.....
stax
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112358
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
Тут сама задача или неясно определена или бред:

Код: plsql
1.
2.
3.
Автор: SY
Приложить+файл
Форум?



Вот какой смысл в сортировке по спецсимволам разбросанным где угодно?

SY.
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112378
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
сортировка отличается лишь тем, что там буква "ё" находится не между "е" и "ж", а между "д" и "е".

Не човчем.
В UCA 7.0 DUCET "е" и "ё" - это одна базовая буква, они по дефолту не различаются.
Попробуйте подобрать устраивающий Вас вариант тут:
https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/linguistic-sorting-and-matching.html#GUID-3D736236-BF98-4A4D-9D09-293AAA50A04E
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112383
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
"е" и "ё" - это одна базовая буква, они по дефолту не различаются.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
select name_short
from
(select 'Расчет' name_short from dual union all
select 'Расчёт' from dual union all
select 'РасчЕт' from dual union all
select 'РасчЁт' from dual union all
select 'Расчеты' name_short from dual union all
select 'Расчёты' from dual union all
select 'РасчЕты' from dual union all
select 'РасчЁты' from dual)
order by NLSSORT(name_short, 'NLS_SORT=UCA0700_DUCET_CI')
;

NAME_SHORT
--------------
РасчЕт   -- Регистронезависимая сортировка - е, ё, Е, Ё равнозначны и не сортируются (случайный порядок)
Расчет
Расчёт
РасчЁт
Расчеты  -- Расч{еёЕЁ}ты > Расч{еёЕЁ}т
РасчЕты
Расчёты
РасчЁты

8 rows selected

select name_short
from
(select 'Расчет' name_short from dual union all
select 'Расчёт' from dual union all
select 'РасчЕт' from dual union all
select 'РасчЁт' from dual union all
select 'Расчеты' name_short from dual union all
select 'Расчёты' from dual union all
select 'РасчЕты' from dual union all
select 'РасчЁты' from dual)
order by NLSSORT(name_short, 'NLS_SORT=UCA0700_DUCET_S3')
-- модификатор tetriary ввел определенность в порядок следования uppercase-lowercase, но сама буква {еЕёЁ} свое место в сортировке не поменяла:
;

NAME_SHORT
--------------
Расчет
РасчЕт
Расчёт
РасчЁт
Расчеты
РасчЕты
Расчёты
РасчЁты

8 rows selected


SQL> 
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112388
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle recommends that you do not use UCA 6.1 and 6.2 collations, nor the UCA0700_DUCET and UCA0700_ROOT collations.
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112394
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax

Нужно сортировать
order by
translate(str,'не спецсимвол','**************') --по спецсимволам
,translate(str,'не цифры','00000000000') -- затем по цифрам
,translate(str,'не анг буквы','sssssssssssss') -- затем по английским буквам
,translate(str,'не рус буквы','шшшшшшшшшшш') --и после этого по русским буквам.
А почему не сделать одним translate-ом на фиксированном nls_sort?
...
Рейтинг: 0 / 0
Как отключить "умную" сортировку?
    #40112531
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Oracle recommends that you do not use UCA 6.1 and 6.2 collations, nor the UCA0700_DUCET and UCA0700_ROOT collations.

Цитировать следует полностью.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить "умную" сортировку?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]