#sql #sql-server
#sql #sql-сервер
Вопрос:
Всякий раз, когда я запускаю этот запрос:
SELECT
Call_DT,
CAST(Talk_Sec_Count Alloc_Sec_Count AS DECIMAL(16, 4)) AS Talk,
CAST(CT_Count * 1.0 - NP_Count / CT_Count * 1.0 AS DECIMAL(16, 4)) AS Quality,
Pymt_Rtn_Rt AS Utilization,
Agent_UID
FROM
[TableName]
WHERE
[Call_Date] <= 13
Я получаю эту ошибку:
Сообщение 8134, уровень 16, состояние 1, строка 31
, ошибка деления на ноль.
Вопрос: что мне нужно сделать, чтобы вставить «НОЛЬ» в таблицу, чтобы избежать этой ошибки?
Ответ №1:
Используйте NULLIF()
:
CAST(CT_Count * 1.0 - NP_Count / NULLIF(CT_Count * 1.0, 0) AS DECIMAL(16, 4)) AS Quality,
Это возвращает NULL
, если знаменатель равен 0
— предотвращение ошибки.
Комментарии:
1. Если CT_Count равно null, не
NULLIF(CT_Count * 1.0, 0)
будет возвращать 0? Что все равно приведет к делению на 0?2. Это
NULLIF
неISNULL
так, @Andrew . Если первое выражение возвращает второе, тоNULL
возвращается, в противном случае значение выражения равно. Если значение первого выражения равноNULL
, то (в этом примере) это не равно0
и поэтомуNULL
возвращается.3. @Larnu — вы абсолютно правы.
IS NULL
<>NULLIF
, несмотря на то, что думает мой мозг…4.
IS NULL
это тоже совсем другое дело дляISNULL
@Andrew 😉