繁体   English   中英

条件 NOT NULL case SQL

[英]Conditional NOT NULL case SQL

我正在尝试计算一个字段,我希望它根据其中一列是否为空而表现出不同的行为。 我正在使用 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 = NULLNULL <> NULL也将产生NULL。

使用ISIS NOT代替。

您可以使CASE语句检查为空

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

你不需要一个case语句。
使用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接受第二个参数(1)并在结果发生时给出结果。

对于需要与NULL进行比较的其他情况, 这将有助于您使用MySQL。

如果您在 SQL 语法中使用 is not null,则最好,'<>' 表示该列具有可与其他句子进行比较的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM