web-dev-qa-db-ja.com

条件付きNOT NULLケースSQL

フィールドを計算しようとしていますが、列の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

これは正しい構文ですか?

16
Spencer

when reply.replies IS NOT NULL

NULLはSQLの特殊なケースであり、=または<>演算子と比較できません。 IS NULLおよびIS NOT NULLが代わりに使用されます。

28
Joe Stefanelli
case when reply.replies IS NOT NULL ...

NULLを通常の(算術)比較演算子と比較することはできません。 NULLとの算術比較はNULLを返します。NULL = NULLまたはNULL <> NULLでもNULLが返されます。

代わりにISまたはIS NOTを使用してください。

5
Tomalak

これにはケースステートメントは必要ありません。
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で動作するように これが役立ちます

1
RichardTheKiwi

あなたはCASEステートメントチェックをヌルにすることができます

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