Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить "умную" сортировку? / 21 сообщений из 21, страница 1 из 1
15.12.2010, 19:07
    #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
15.12.2010, 19:09
    #37016864
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить "умную" сортировку?
Код: plaintext
1.
alter session set nls_sort=binary_ci;

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

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

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

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

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

спасибо за участие.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
16.11.2021, 12:34
    #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
16.11.2021, 12:39
    #40112307
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить "умную" сортировку?
Pastic,

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

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



А как её применить в данном случае?
...
Рейтинг: 0 / 0
16.11.2021, 14:11
    #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
16.11.2021, 14:34
    #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
16.11.2021, 15:31
    #40112351
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить "умную" сортировку?
Pastic


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


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


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

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

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

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

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

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



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

SY.
...
Рейтинг: 0 / 0
16.11.2021, 17:43
    #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
16.11.2021, 18:07
    #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
16.11.2021, 18:57
    #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
16.11.2021, 20:39
    #40112394
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить "умную" сортировку?
Stax

Нужно сортировать
order by
translate(str,'не спецсимвол','**************') --по спецсимволам
,translate(str,'не цифры','00000000000') -- затем по цифрам
,translate(str,'не анг буквы','sssssssssssss') -- затем по английским буквам
,translate(str,'не рус буквы','шшшшшшшшшшш') --и после этого по русским буквам.
А почему не сделать одним translate-ом на фиксированном nls_sort?
...
Рейтинг: 0 / 0
17.11.2021, 13:22
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить "умную" сортировку? / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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