powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / NULL поле как 0
13 сообщений из 13, страница 1 из 1
NULL поле как 0
    #32429989
Фотография ЁшкинКот!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите мне такую вещь.

Как в IBase и FB в запросе обращаться с NULL полем как с 0.
например такой запрос:
Код: plaintext
select Field_1, Field_2, Field_1+Field_2 from Table

не прокатит, если в Field_1 или Field_2 будит NULL, а как сделать, чтоб прокатил и пустое поле считалось бы как 0?

Заранее благодарен.
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430008
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Избавиться вовсе от нулл в этих полях. (default там или еще как...)
2. Использовать UDF
3. Использовать новые конструкции в расширенном диалекие SQL в последних версиях клонов ИБ. (when типа...)
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430014
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а оно надо?
null это null а не 0.
если тебе нужен ноль, храни ноль.

ну а если тебе пофигу, то попробуй
select (case somefield is null then 0 else somefield) s_field from sometable
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430025
Фотография ЁшкинКот!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и проблема, что избавиться от NULL нельзя, так как появляется он в пробелах левого джойна 2х таблиц, и заполнить это место нулями никак ниполучится.

А вот в догонку вопрос: что такое за функция такая в SQL - coalesce( ) , и какой у неё синтаксис, мне так кажется, что она тут как раз то и нужна...
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430040
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторselect Field_1, Field_2, Field_1+Field_2 from Table
не прокатит, если в Field_1 или Field_2 будит NULL, а как сделать, чтоб прокатил и пустое поле считалось бы как 0?
FireBird 1.5:
Код: plaintext
select Field_1, Field_2, COALESCE(Field_1+Field_2, Field_1, Field_2,  0 ) from Table
или
Код: plaintext
select Field_1, Field_2, COALESCE(Field_1,  0 ) + COALESCE(Field_2,  0 ) from Table

У InterBase 7.X тоже что-то похожее есть вроде бы.
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430042
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT COALESCE(FIELD1,0) FROM ...

Равноценно

SELECT CASE WHEN FIELD1 IS NOT NULL THEN FIELD1 ELSE 0 END FROM ...
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430048
Фотография ЁшкинКот!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо.

но в IBase COALESCE не работает :((
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430057
Фотография ЁшкинКот!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и даже CASE WHEN он не хочет делать :(
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430074
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве IB 7.X isnull не прикрутили?
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430176
Фотография ЁшкинКот!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, а у меня IBase 6 - вот где наверно засада.
coalesce( ) и case в селекте не работают :((

ну всеравно обидно - как же так, складываю два поля, одно из них не NULL а получаю NULL :((

может можно это обойти?
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430185
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видю два пути:
1. Сменить сервер на FB 1.5
2. Написать ХП и выбирать из нее
...
Рейтинг: 0 / 0
NULL поле как 0
    #32430193
Фотография ЁшкинКот!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kull Damned

путей маловато, и все они тернистые.

но и на том спасиба
...
Рейтинг: 0 / 0
NULL поле как 0
    #32436956
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй UDF ф-ю Z(a) из модуля rfunc.dll если поле типа DOUBLE, она как раз для этого и предназначена

select Z(field1)
from t

для объявления примени:
DECLARE EXTERNAL FUNCTION Z
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT 'fn_z' MODULE_NAME 'rfunc';
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / NULL поле как 0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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