【问题标题】:Conditional NOT NULL case SQL条件非空情况 SQL
【发布时间】:2011-06-16 19:14:26
【问题描述】:

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

这是正确的语法吗?

【问题讨论】:

    标签: sql mysql null mysql-error-1064


    【解决方案1】:

    最好在 SQL 语法中使用 is not null,'' 表示该列具有与其他语句比较的值。

    【讨论】:

      【解决方案2】:

      你可以做一个 CASE 语句检查 Null

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

      【讨论】:

        【解决方案3】:

        您不需要为此提供案例说明。
        使用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。

        【讨论】:

          【解决方案4】:
          case when reply.replies IS NOT NULL ...
          

          您不能将 NULL 与常规(算术)比较运算符进行比较。任何与 NULL 的算术比较都会返回 NULL,即使 NULL = NULLNULL &lt;&gt; NULL 也会产生 NULL。

          请改用ISIS NOT

          【讨论】:

            【解决方案5】:

            你需要有when reply.replies IS NOT NULL

            NULL 是 SQL 中的一种特殊情况,不能与 = 或 运算符进行比较。改为使用 IS NULL 和 IS NOT NULL。

            【讨论】:

            • 当然可以使用=&lt;&lt;&gt;进行比较。比较的结果是NULL。同意三值布尔逻辑并不适合所有人,但你不能说“它无法比较”。
            • 虽然这显示了如何使用 CASE,但有问题的代码甚至不需要 case
            猜你喜欢
            • 2012-05-03
            • 1970-01-01
            • 2012-04-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-04
            • 2019-07-12
            • 1970-01-01
            相关资源
            最近更新 更多