Условный NOT NULL регистр SQL - PullRequest
15 голосов
/ 27 января 2011

Я пытаюсь вычислить поле и хочу, чтобы оно велось по-разному в зависимости от того, является ли один из столбцов пустым.Я использую 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

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

Ответы [ 4 ]

25 голосов
/ 27 января 2011

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

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

5 голосов
/ 27 января 2011
case when reply.replies IS NOT NULL ...

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

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

1 голос
/ 13 апреля 2015

Вы можете сделать CASE-оператор, проверяя Null

SELECT MAX(id+1),  
IF(MAX(id+1) IS NULL, 1, MAX(id+1))
AS id   
FROM `table_name`;
1 голос
/ 27 января 2011

Для этого вам не нужно указывать регистр.
Используйте функцию 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
Затем IFNULL принимает 2-й параметр (1) и дает его в результате, когда это происходит.

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

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