Использование операции деления в операторе выбора - PullRequest
0 голосов
/ 20 мая 2019

Кто-то написал следующее предложение выбора:

select ... ,   FLOOR (a / b) AS c, ...

Вы можете сообщить о проблеме оператора выбора.Если b равно нулю, запрос приведет к исключению.

Как разместить здесь условие, чтобы, если b равно нулю, c также получило ноль?

Обновление:

Оператор caseможет быть использован для решения этой проблемы.

Ответы [ 2 ]

4 голосов
/ 20 мая 2019

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

select ..., CASE WHEN b IS 0 THEN 0 ELSE (a / b) END AS c, ...
1 голос
/ 20 мая 2019

Использование nullif():

select ... , FLOOR(a / NULLIF(b, 0)) AS c, ...

Я предпочитаю иметь NULL как в неизвестном значении.Если вы хотите 0, вы можете использовать:

select ... , COALESCE(FLOOR(a / NULLIF(b, 0)), 0) AS c, ...

Конечно, это предполагает, что ни a, ни b сами по себе не являются NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...