powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разный порядок для order by и для min
3 сообщений из 3, страница 1 из 1
Разный порядок для order by и для min
    #39952411
ln123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, столкнулся со странной ситуацией
Есть запрос

Код: plsql
1.
2.
3.
4.
select min(t.c),max(t.c), min(t.c) keep (dense_rank first order by t.c) from 
(select '005' c from dual
union  all
select '0-39' from dual) t



в результате его выполнения неожиданно (во всяком случае для меня) получаем

MIN(T.C) MAX(T.C) MIN(T.C)KEEP(DENSE_RANKFIRSTOR 0-39 005 005

Если выполнить запрос
Код: plsql
1.
2.
3.
4.
5.
6.
select t.c
from 
(select '005' c from dual
union  all
select '0-39' from dual) t
order by t.c



То результат будет такой

C 005 0-39

Т.е. для order by минимальное значение '005', а для функции min почему-то '0-39'

В чем тут может быть дело?


Ради интереса выполнил такой же эксперимент под PostgreSQL там минимальное значение '005' что собственно и ожидалось
...
Рейтинг: 0 / 0
Разный порядок для order by и для min
    #39952429
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ln123,

nls_sort
Код: 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.
SQL> select min(t.c),max(t.c), min(t.c) keep (dense_rank first order by t.c) from
  2  (select '005' c from dual
  3  union  all
  4  select '0-39' from dual) t
  5  /

MIN( MAX( MIN(
---- ---- ----
0-39 005  0-39

SQL> select min(t.c),max(t.c), min(t.c) keep (dense_rank first order by NLSSORT(t.c, 'NLS_SORT = UKRAINIAN')) from
  2  (select '005' c from dual
  3  union  all
  4  select '0-39' from dual) t
  5  /

MIN( MAX( MIN(
---- ---- ----
0-39 005  005


SQL> ed
Wrote file afiedt.buf

  1  select min(t.c),max(t.c), min(t.c) keep (dense_rank first order by NLSSORT(t.c, 'NLS_SORT = BINARY')) from
  2  (select '005' c from dual
  3  union  all
  4* select '0-39' from dual) t
SQL> /

MIN( MAX( MIN(
---- ---- ----
0-39 005  0-39



....
stax
...
Рейтинг: 0 / 0
Разный порядок для order by и для min
    #39952451
ln123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Спасибо, нашел в документации при значении NLS_COMP = BINARY (значение по умолчанию) и ANSI для min и max будет использовано бинарное сравнение, а для order by сравнение выполняется по правилам в NLS_SORT.

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


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