条件NOT NULL情况SQL

时间:2011-01-27 19:42:44

标签: sql mysql null mysql-error-1064

我正在尝试计算一个字段,我希望它的行为不同,具体取决于其中一列是否为空。我正在使用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 个答案:

答案 0 :(得分:24)

您需要when reply.replies IS NOT NULL

NULL是SQL中的一种特殊情况,无法与=或&lt;&gt;进行比较运营商。改为使用IS NULL和IS NOT NULL。

答案 1 :(得分:5)

case when reply.replies IS NOT NULL ...

您无法将NULL与常规(算术)比较运算符进行比较。与NULL的任何算术比较都将返回NULL,即使NULL = NULLNULL <> NULL也将产生NULL。

改为使用ISIS NOT

答案 2 :(得分:1)

你不需要一个案例陈述。
使用IFNULL function

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接受第二个参数(1)并在结果发生时给出结果。

对于需要与NULL进行比较的其他情况,this will help you可以与MySQL一起使用。

答案 3 :(得分:1)

您可以使CASE语句检查为空

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