Goran Bibic Ответов: 2

Если нет значения have (NULL), нужно установить 0.00 SQL


Мой код работает нормально.


Вопрос:

Если значение равно нулю, то нужно поставить значение 0


Какая-то помощь?

Что я уже пробовал:

SELECT SUM(isnull(cast(REPLACE(TRY_CONVERT(int,TRY_CONVERT(float, iznos_bpdv),1), '#,0.00','0')AS decimal(10,2)),0.00)) as UKUPNObpdv
from mp_racun_roba
where tip_robe = 'Usluge (Generalno)' and id_fakture=105

Kornfeld Eliyahu Peter

Вы можете использовать COALESCE и переместить множественную проверку NULL в SQL...
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/coalesce-transact-sql?view=sql-server-2017

2 Ответов

Рейтинг:
17

CHill60

Нужно сделать пару замечаний...

1. Если iznos_bpdv etc нужно хранить числовые данные, делать их столбцами числового типа на таблице. Всегда храните данные в соответствующем типе столбца.

2. Функция sum будет рационализировать все равно так что нет значения NULL не требуется IsNull ни Coalesce внутри вызова функции.

3. Если каждая отдельная запись в таблице (которая соответствует Where критериям), Null а потом ... SUM будет вернуть Null, так что вы можете поставить IsNull на снаружи этого вызова функции, как показано в этом фрагменте кода

declare @tab table (x int null)
insert into @tab values (null), (null), (null)
select sum(x) from @tab				-- returns null
select isnull(sum(x),0) from @tab	-- returns zero
4. Isnull это незначительно быстрее, чем Coalesce если у вас есть только два варианта т. е.
select isnull(sum(x),0) from @tab	-- is marginally faster than ...
select coalesce(sum(x),0) from @tab -- this


Рейтинг:
0

Wendelius

Не уверен, правильно ли я понял вопрос, но если вы хотите:

- Преобразование iznos_bpdv в числовое значение

- Используйте 0 в случае неудачи преобразования

Вы могли бы попробовать что-то вроде

SELECT SUM( COALESCE( TRY_CONVERT( float, iznos_bpdv), 0) ) AS UKUPNObpdv
FROM mp_racun_roba
WHERE tip_robe = 'Usluge (Generalno)'
AND id_fakture = 105


Goran Bibic

Мой код работает нормально. Когда результат имеет значение, это нормально.
Нужно когда результат равен нулю написать 0.00

Какая-то помощь?

Goran Bibic

Я пытаюсь это сделать, но когда valuee null из sql ничего не происходит, мне нужно 0.00, когда это null

частный недействительными ukupno_bez_pdv_usluge()
{
SqlConnection con2 = новый SqlConnection(cs);



строка SQL-запрос = ("выбрать сумма(функция isnull(литой(заменить(TRY_CONVERT(инт TRY_CONVERT(поплавок,iznos_bpdv),1), '#,0.00',")как decimal(10,2)),0.00)) как UKUPNObpdv," +
"Сумма(функция isnull(литой(заменить(TRY_CONVERT(поплавок, TRY_CONVERT(поплавок, ПДВ), 1), '#,0.00', ")как десятичное(10, 2)), 0.00)) как UKUPNOpdv," +
"Сумма(функция isnull(литой(заменить(TRY_CONVERT(поплавок, TRY_CONVERT(поплавок, mp_cijena), 1), '#,0.00', ")как десятичное(10, 2)), 0.00)) как UKUPNOsapdv" +
"от mp_racun_roba" +
"где tip_robe = 'Usluge (Generalno)' и id_fakture =" + id_fakture
);


Команда SqlCommand = новая команда SqlCommand(sqlquery, con2);
con2.Открыть();
SqlDataReader sdr = команда.Метода executereader();

если (СДР.Читать())

{

usluga_bez_pdvTextBox.Text = sdr["UKUPNObpdv"].Метод toString();
usluga_pdvTextBox.Text = sdr["UKUPNOpdv"].Метод toString();
usluga_sa_pdvTextBox.Text = sdr["Укупносапдв"].Метод toString();

}

еще


{

usluga_bez_pdvTextBox.Текст = "0.00";
usluga_pdvTextBox.Текст = "0.00";
usluga_sa_pdvTextBox.Текст = "0.00";

}

con2.Рядом();

}