Добавление NULL к целому числу для получения целочисленного результата на сервере SQL

У меня есть таблица, столбцы которой будут содержать целое число, но я не уверен, что они могут также содержать NULL. Теперь предположим, что я хочу сложить целые числа, (вместе с любым NULL), чтобы получить результат в виде целого числа даже если любой столбец между ними равен NULL.

Я знаю о функции ISNULL() и функции COALESCE(). Но я бы предпочел не использовать ни один из них. И я не хочу использовать CASE. Я знаю, что CASE сделает то, что я хочу, но я ищу что-то более лучшее.

Так же, как у нас есть CONCAT_NULL_YIELDS_NULL, чтобы гарантировать, что когда строка объединяется с нулевым значением, результат не будет нулевым.

Я хочу что-то похожее на этот вариант. Заранее спасибо.


person vstandsforvinay    schedule 15.07.2014    source источник
comment
Не могли бы вы объяснить, почему вы не хотите использовать функции, предназначенные для решения этой проблемы?   -  person Hans Kesting    schedule 15.07.2014
comment
Могу я спросить, по какой причине вы не используете isnull, поскольку он создан для того, что вы хотите делать?   -  person schlonzo    schedule 15.07.2014
comment
ISNULL() и COALESCE() предназначены для того, чтобы делать то, что вам нужно. Как вы собираетесь победить это?   -  person Sergey Kalinichenko    schedule 15.07.2014
comment
Любое другое решение было бы просто взломом, почему бы просто не использовать эти функции?   -  person DavidG    schedule 15.07.2014
comment
Я знаю, что isull и объединение могли бы сделать это. Но я спрашивал, есть ли другой способ!!   -  person vstandsforvinay    schedule 15.07.2014


Ответы (2)


Вероятно, вам следует просто использовать эти функции. Предполагая, что вы не можете:

SELECT SUM(MyIntCol) --filters out NULLs automatically

SELECT CASE WHEN MyIntCol IS NOT NULL THEN MyIntCol ELSE 0 END --default value 0
person usr    schedule 15.07.2014
comment
Но, я думаю, есть проблема. Я хочу добавить значения, которые находятся в разных столбцах. - person vstandsforvinay; 15.07.2014
comment
Вы можете использовать вторую строку кода, которую я разместил для этого. - person usr; 15.07.2014
comment
Но я думал, что я упоминал, чтобы даже не использовать CASE. В любом случае, спасибо, что сказали, что sum() будет игнорировать нули... - person vstandsforvinay; 15.07.2014
comment
Хорошо, я этого не видел. Тогда на ваш вопрос нет ответа. - person usr; 15.07.2014

На самом деле это не ответ для вас, но это может быть решение для людей, использующих MS SQL Server 2012 или новее.

SELECT IIF(<NullableColumn1> is null, 0, <NullableColumn1>)
+ IIF(<NullableColumn2> is null, 0, <NullableColumn12) ...
FROM <YourTable>

Но я предполагаю, что движок будет делать то же самое, что и при использовании вместо него CASE.

person schlonzo    schedule 15.07.2014
comment
Кстати. IIF действительно переводится в регистр: msdn.microsoft.com/en-us/library /hh213574.aspx - person Martin K.; 15.07.2014
comment
@usr на самом деле это не было моим намерением. Я просто хотел знать, есть ли какой-либо другой способ, кроме тех, которые я упомянул. - person vstandsforvinay; 16.07.2014