Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 11:34   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию NULL в sql-запросах

Всем привет.
Допустим, в таблице 4 поля
a, b, c, d
их значения
2, NULL, 2, 2
Делаем запрос
select sum(a+(b*c)+d) from Table
Результат NULL. Почему?
Понятно, что число, умноженное на 0 даст 0,
а число, умноженное на NULL даст NULL.
Т.е. (b * c) = NULL.
Но ведь 2 + NULL + 2 в принципе должно выдать 4.
Почему запрос выдает пустоту?
_SERGEYX_ вне форума Ответить с цитированием
Старый 27.10.2010, 12:04   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Цитата:
Но ведь 2 + NULL + 2 в принципе должно выдать 4.
Предположение не верное.
Так же как и при умножении, в любых других арифметических операциях (и не только) сервер, встречая NULL в выражении "не знает" что с ним делать. Он не уполномочен самостоятельно преобразовывать NULL в ноль. Отсюда и результат выражения - NULL. "Неизвестные значения" (NULL) требуют отдельной обработки.
Karabash вне форума Ответить с цитированием
Старый 27.10.2010, 12:56   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да, на NULL нуна проверки ставить... Иначе любое выражение где поучавствует NULL станет само NULLём
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2010, 13:29   #4
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

Причем NULL<>NULL
Aristarh Dark вне форума Ответить с цитированием
Старый 27.10.2010, 13:35   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Понятно. Я так и думал.
Просто, два часа искал ошибку в программе пока не нашел, что значение одной из ячеек таблицы стоит NULL вместо 0.
Во всех таблицах в числовых полях в структуре установил Default = 0.
_SERGEYX_ вне форума Ответить с цитированием
Старый 27.10.2010, 18:16   #6
BeJIuKuu_Hexo4yxa
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 96
По умолчанию

В Oracle есть функция NVL. Очень удобна для таких случаев
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
BeJIuKuu_Hexo4yxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемка с соксами при idhttp запросах maloy_ya Работа с сетью в Delphi 3 29.09.2010 18:33
Пустые поля в запросах PetroPorsh Microsoft Office Access 1 16.10.2008 16:56
Обработка значения Null в sql запросе KeyDok БД в Delphi 6 13.07.2008 12:03
MS SQL server 2000, ADO. Добавленые записи не отображаются при последующих запросах. _victor БД в Delphi 1 17.06.2007 13:33
Возможна ли рекурсия в запросах eremin БД в Delphi 0 23.05.2007 15:54