如果值为0.000000,则将十进制值转换为NULL

时间:2013-07-22 15:48:52

标签: sql-server

我想在null-able列中将小数值0.000000和NULL都处理为NULL

例如:

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

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

3 个答案:

答案 0 :(得分: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,因为它暂时失效)

答案 1 :(得分:1)

尝试删除0.000000附近的引号:

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

使用引号表示您将其与字符串进行比较。

答案 2 :(得分:0)

问题是数字真的接近零,但你没有看到额外的数字。这有两种方法可以做你想要的:

数值方法:

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

“make it a string”方法:

(case when format(worthColumn, 6) = '0.000000' then NULL
      ELSE worthColumn
 END) AS SumOfWorth