Корректность вычислений в запросах при значении операнда NUL
Корректность вычислений в запросах при значении операнда NUL
Добрый день!
Подскажите, как выйти из сложившейся ситуации :
есть запрос
select ((select ...) - (select ...)) as val_1 from ...
в некоторых случаях один из операндов принимает значение NULL и следовательно все выражение принимает значение NULL. Как сделать так, чтобы в случае null операнда он интерпретировался как 0 (ноль)?
Хранимую процедуру писать не хочется из-за такого пустяка.
СПАСИТЕ!!!
Подскажите, как выйти из сложившейся ситуации :
есть запрос
select ((select ...) - (select ...)) as val_1 from ...
в некоторых случаях один из операндов принимает значение NULL и следовательно все выражение принимает значение NULL. Как сделать так, чтобы в случае null операнда он интерпретировался как 0 (ноль)?
Хранимую процедуру писать не хочется из-за такого пустяка.
СПАСИТЕ!!!
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Функцию COALESCE() в описани по версии 6.1 не нашел, наверное в старших версиях или FB. Не хранить нулл можно, но когда речь идет о результатах выборки, которая ничего не вернула, то тут сразу и сложнее - вопрос не решается.
Выход я нашел в UDF следующего содержания:
function IntNULL20(var val:integer):integer ;cdecl;export;
begin
result:=val;
end;
Пока работает без ошибок. Если в этом коде есть опасность, предупредите пожалуйста!
Выход я нашел в UDF следующего содержания:
function IntNULL20(var val:integer):integer ;cdecl;export;
begin
result:=val;
end;
Пока работает без ошибок. Если в этом коде есть опасность, предупредите пожалуйста!
Результатом выполнения запроса является результат арифметического действия над результатами выполнения двух независимых запросов. При этом есть вероятность (гораздо больше 1%, а в некоторых обстоятельствах даже 100%) что один из этих запросов вернет пустое множество строк, тоесть совсем ничего и не NULL оно быть не может. Не знаю я механизмов заставить вернуть 0 если там ничего нет. Вот я и спрашиваю, а не знает ли кто из посещающих здесь ГУРУ. Найденный мною выход через UDF меня устраивает, но ковыряться в исходниках сервера и выяснять всегда ли IB в UDF пошлет ноль, если значение null, меня не очень прильщает.kdv писал(а):а ты не используй null, если они тебе не нужны.
Я дико извиняюсь, версия IB 6.0.2.0, но не в этом суть. Она вроде как бесплатная и для решения частных не больших задач локально работающих вполне даже подходит. А лишний раз думать о том, что пользуешь неразрешенное не очень хочется. Да и народ до сих пор нормально юзает 5.6.
.. но это тступление.
Собственно вопрос не в том, что вернет, а что получит? Всегда ли при передаче удээфине ибейс будет нулл заменять на ноль, или может случиться непредвиденное?
.. но это тступление.
Собственно вопрос не в том, что вернет, а что получит? Всегда ли при передаче удээфине ибейс будет нулл заменять на ноль, или может случиться непредвиденное?
версию от mers.com вообще на порог нельзя пускать.IB 6.0.2.0, но не в этом суть. Она вроде как бесплатная
для вас же писано и в faq, и тут
www.ibase.ru/devinfo/allversions.htm