フィールドを計算しようとしていますが、列の1つがnullであるかどうかによって、フィールドの動作が異なります。 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
これは正しい構文ですか?
when reply.replies IS NOT NULL
NULLはSQLの特殊なケースであり、=または<>演算子と比較できません。 IS NULLおよびIS NOT NULLが代わりに使用されます。
case when reply.replies IS NOT NULL ...
NULLを通常の(算術)比較演算子と比較することはできません。 NULLとの算術比較はNULLを返します。NULL = NULL
またはNULL <> NULL
でもNULLが返されます。
代わりにIS
またはIS NOT
を使用してください。
これにはケースステートメントは必要ありません。
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
Reply.repliesがnullの場合、式はNULLへのショートカットです。
IFNULLは2番目のパラメーター(1)を取り、それが発生したときに結果としてそれを提供します。
NULLと比較する必要がある他のケースでは、MySQLで動作するように これが役立ちます 。
あなたはCASEステートメントチェックをヌルにすることができます
SELECT MAX(id+1),
IF(MAX(id+1) IS NULL, 1, MAX(id+1))
AS id
FROM `table_name`;