1

我想将可空列中的十进制值 0.000000 和 NULL 都作为 NULL 处理

例如:

case worthColumn
WHEN '0.000000' then NULL
WHEN NULL then NULL
ELSE worthColumn
END 
AS SumOfWorth

但是值 0.000000 总是在结果中结束?

4

3 回答 3

8

如果是小数,则无需将其与字符串进行比较。使用NULLIF

NULLIF(worthColumn,0)

如果您使用以下示例:

CREATE TABLE YourTable(A DECIMAL(20,3));

INSERT INTO YourTable
VALUES (10),(1),(NULL),(0.000),(20);

SELECT *, NULLIF(A,0)
FROM YourTable

然后你会得到以下结果:

╔════════╦══════════════════╗
║   A    ║ (No column name) ║
╠════════╬══════════════════╣
║ 10.000 ║ 10.000           ║
║ 1.000  ║ 1.000            ║
║ NULL   ║ NULL             ║
║ 0.000  ║ NULL             ║
║ 20.000 ║ 20.000           ║
╚════════╩══════════════════╝

(现在不能发布 sqlfiddle,因为它暂时关闭了)

于 2013-07-22T15:51:56.720 回答
2

尝试删除 0.000000 周围的引号:

case worthColumn
WHEN 0.000000 then NULL
WHEN NULL then NULL
ELSE worthColumn
END 
AS SumOfWorth

有引号意味着您将其与字符串进行比较。

于 2013-07-22T15:57:39.277 回答
0

问题是数字确实接近于零,但您看不到多余的数字。这里有两种方法可以做你想做的事:

数值方法:

case WHEN abs(worthColumn ) < 0.0000005 then NULL
     ELSE worthColumn
 END) AS SumOfWorth

“使其成为字符串”方法:

(case when format(worthColumn, 6) = '0.000000' then NULL
      ELSE worthColumn
 END) AS SumOfWorth
于 2013-07-22T16:21:27.807 回答