Подтвердить что ты не робот

Условный NOT NULL case SQL

Я пытаюсь вычислить поле, и я хочу, чтобы он вел себя по-разному в зависимости от того, является ли один из столбцов нулевым. Я использую MySQL

CASE 
  WHEN reply.replies <> NULL THEN
  24/((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(qcr.LAST_MOD_TIME)+3600)/3600)*(ces.EXPERT_SCORE+2.5*scs.SIMILARITY)*(EXP(-reply.replies))
  ELSE 1
END as ANSWER_SCORE

Это правильный синтаксис?

4b9b3361

Ответ 1

Вам нужно иметь when reply.replies IS NOT NULL

NULL является особым случаем в SQL и не может сравниться с операторами = или < > . IS NULL и NOT NULL используются.

Ответ 2

case when reply.replies IS NOT NULL ...

Вы не можете сравнивать NULL с обычными (арифметическими) операторами сравнения. Любое арифметическое сравнение с NULL вернет NULL, даже NULL = NULL или NULL <> NULL будет выдавать NULL.

Используйте IS или IS NOT вместо этого.

Ответ 3

Для этого вам не нужен аргумент case.
Используйте функцию IFNULL

IFNULL(24/((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(qcr.LAST_MOD_TIME)+3600)/3600)
*(ces.EXPERT_SCORE+2.5*scs.SIMILARITY)*(EXP(-reply.replies)), 1) as ANSWER_SCORE

Если response.replies равно null, выражение является ярлыком для NULL
IFNULL затем принимает второй параметр (1) и дает это в результате, когда это происходит.

В других случаях, когда вам нужно сравнить с NULL, это поможет вам работать с MySQL.

Ответ 4

Вы можете сделать выражение CASE Check Null

SELECT MAX(id+1),  
IF(MAX(id+1) IS NULL, 1, MAX(id+1))
AS id   
FROM `table_name`;