J'essaie de calculer un champ et je veux qu'il se comporte différemment selon que l'une des colonnes se trouve être nulle. J'utilise 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
Est-ce la bonne syntaxe?
Vous devez avoir when reply.replies IS NOT NULL
NULL est un cas particulier en SQL et ne peut pas être comparé aux opérateurs = ou <>. IS NULL et IS NOT NULL sont utilisés à la place.
case when reply.replies IS NOT NULL ...
Vous ne pouvez pas comparer NULL avec les opérateurs de comparaison réguliers (arithmétiques). Toute comparaison arithmétique avec NULL retournera NULL, même NULL = NULL
ou NULL <> NULL
donnera NULL.
Utilisez IS
ou IS NOT
au lieu.
Vous n'avez pas besoin d'une déclaration de cas pour cela.
Utilisez fonction 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
Si reply.replies est null, l'expression est raccourcie vers NULL
IFNULL prend alors le 2ème paramètre (1) et le donne comme résultat quand il se produit.
Pour les autres cas où vous devez comparer avec NULL, cela vous aidera pour travailler avec MySQL.
Vous pouvez faire une déclaration CASE en vérifiant Null
SELECT MAX(id+1),
IF(MAX(id+1) IS NULL, 1, MAX(id+1))
AS id
FROM `table_name`;