我正在尝试计算一个字段,我希望它的行为不同,具体取决于其中一列是否为空。我正在使用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
这是正确的语法吗?
答案 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 = NULL
或NULL <> NULL
也将产生NULL。
改为使用IS
或IS 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`;