【问题标题】:SQL case 0 then NULLSQL case 0 然后 NULL
【发布时间】:2015-11-21 22:47:08
【问题描述】:

当我的表中的数字为 0 时,我想获得NULL。如何使用 SQL 实现这一点?我试过了

SELECT ID, 
       Firstname, 
       Lastname, 
       CASE Number 
         WHEN 0 THEN NULL 
       END
  FROM tPerson

但这会导致错误:

CASE 规范中的至少一个结果表达式必须是 NULL 常量以外的表达式。

【问题讨论】:

    标签: sql case


    【解决方案1】:

    您可以简单地将 IIF() 与 sql server 2012 及更高版本一起使用

    SELECT ID, 
           Firstname, 
           Lastname, 
           IIF(Number = 0, NULL, Number) as Number 
           END
    FROM tPerson
    

    【讨论】:

      【解决方案2】:

      正如其他人所提到的,您忘记告诉您的 CASE 语句返回数字,以防数字不为空。

      但是在 SQL Server 中,您可以使用 NULLIF,我认为它更具可读性:

      select 
        id, 
        firstname, 
        lastname, 
        nullif(number, 0) as number
      from tperson;
      

      如果您想坚持使用标准 SQL,请继续使用 CASE:

      case when number = 0 then null else number end as number
      

      【讨论】:

      【解决方案3】:

      在 MySQL 中你也可以使用if:

      select if(number = 0, null, number) ... 
      

      【讨论】:

      • 'If' 不能在 select 中使用
      • 在 SQL-Server 中?我不能用
      • @Lali 谁说这是 SQL-Server?当然不是 OP。
      • 我看到一个带有 sql-server 的标签
      【解决方案4】:
      SELECT ID, Firstname, Lastname,
       CASE WHEN Number!=0 THEN Number END 
      FROM tPerson
      

      【讨论】:

        【解决方案5】:

        可能你需要ELSE:

        SELECT 
          ID, Firstname, Lastname CASE Number WHEN 0 THEN NULL ELSE Number END
        FROM tPerson
        

        【讨论】:

          【解决方案6】:

          试试:

          SELECT ID, Firstname, 
             Lastname, 
             CASE Number WHEN 0 THEN NULL ELSE Number END 
          FROM tPerson
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-07-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多