проблема с NULL значением в ORDER BY

Влад

Новичок
проблема с NULL значением в ORDER BY

Спасибо за интерес к данному вопросу.
Есть следующий SQL

select null Value_, 1 Number_, ascii('') AsciiCode_
from dual
union all
select ' ', 2, ascii(' ')
from dual
union all
select '1', 3, ascii('1')
from dual
union all
select '-', 4, ascii('-')
from dual
union all
select '2', 5, ascii('2')
from dual
union all
select 'n', 6, ascii('n')
from dual
union all
select 'a', 7, ascii('a')
from dual
order by 1


Результат :
VALUE_ NUMBER_ ASCIICODE_
_______2________32
-_______4________45
1_______3________49
2_______5________50
a_______7________97
n_______6________110
_______1________


Вопрос :
сортировка идет по десятичному коду, но у NULL значения код пустой, хотя должен быть равен 0 (основываясь на таблице набора символов ASCII), и соответственно Oracle ставит его последним, что плохо. Хотелось бы, что бы NULL значение было первым.
P.S. Может NLS_SORT может помочь, но мне кажется врядли.
Спасибо.
 

romutis

Guest
Откуда взялось убеждение, что NULL равен 0?
 

Crazy

Developer
Re: проблема с NULL значением в ORDER BY

у NULL значения код пустой, хотя должен быть равен 0
NULL вообще ничему не равен. Даже другому NULL.

Хотелось бы, что бы NULL значение было первым.
Испольуй функцию, анализирующую значение поля на NULL, и возвращающую его 0 (если оно NULL) или собственно значение поля. :)
 

Влад

Новичок
4 romutis
десятичный ASCII код значения NULL, равен 0.

4 Crazy
>Испольуй функцию, анализирующую значение поля на NULL,
>и возвращающую его 0 (если оно NULL) или собственно
>значение поля.

Хорошо, можно NULL менять на 0 (через NVL), но если в сортировке будет участвовать например символ %, то этот символ будет впереди! Что плохо.
 

romutis

Guest
Влад,
а как соотносится таблица ASCII с тем, что под значением "VALUE IS NULL" понимает Оракл? Не надо приравнивать мягкое к теплому. :)
Обрати внимание - все проверки на NULL в Оракле идут не через "=NULL", а через "IS NULL"
 

Crazy

Developer
Автор оригинала: Влад
Хорошо, можно NULL менять на 0 (через NVL), но если в сортировке будет участвовать например символ %, то этот символ будет впереди! Что плохо.
Кто заставляет тебя менять именно на 0?
 

Влад

Новичок
как-то от вопроса уходим, если на примере, то надо решить такую задачу :
есть таблица с одной колонкой varchar2(10) и ее надо отсортировать, по возрастанию и чтобы записи с NULL значениями были первыми.
 

romutis

Guest
"SELECT NVL(<field>,CHR(0))..." даст тебе ожидаемый результат.
 
Сверху