Можно ли вернуть ноль, если значение меньше нуля, без использования оператора case?Возврат нуля, если значение меньше нуля
например. Max (a, 0) < - «Макс» не существует.
Я хочу, чтобы мой код был максимально кратким.
Можно ли вернуть ноль, если значение меньше нуля, без использования оператора case?Возврат нуля, если значение меньше нуля
например. Max (a, 0) < - «Макс» не существует.
Я хочу, чтобы мой код был максимально кратким.
Просто для удовольствия:
DECLARE @a INT = -3
SELECT COALESCE(NULLIF (ABS(@a), [email protected]), 0)
Это сообщение только намекает в направлении, что выражение CASE
является гораздо лучшим вариантом, чтобы получить ожидаемый результат.
NULLIF
есть, в конце концов, всего лишь причуда CASE
. Пример запрос выше расширяется (в плане выполнения) по адресу:
CASE
WHEN
CASE
WHEN abs([@a])=(-[@a])
THEN NULL
ELSE abs([@a])
END IS NOT NULL
THEN
CASE
WHEN abs([@a])=(-[@a])
THEN NULL
ELSE abs([@a])
END
ELSE (0)
END
Подходящего CASE
выражения:
-- All versions
SELECT CASE WHEN @a > 0 THEN @a ELSE 0 END;
-- SQL Server 2012 or later
SELECT IIF(@a > 0, @a, 0);
@PaulWhite: вот еще одна причина использовать эту простую версию: 'SELECT CASE WHEN @a <0 THEN 0 ELSE @a END' –
@TimSchmelter Да, будьте осторожны, чтобы правильно обращаться с« NULL ». (Я предполагаю, что результат должен быть 0, а не 'NULL'). –
Альтернативное выражение, которое обрабатывает NULL: '@A * ((Sign (@A) + 1)/2)' – HABO
Почему вы не хотите использовать выражение случая. Это в значительной степени то, для чего они были сделаны. –
Его в вопросе! –
Также смотрите: [Функция в SQL Server 2008 похожа на GREATEST в mysql?] (Http://stackoverflow.com/questions/4725823/function-in-sql-server-2008-similar-to-greatest-in-mysql) –