除以零也使用* -1

时间:2019-05-24 15:21:52

标签: sql casting

我正在使用此语句获取商品的单价

(CAST (SalesPrice AS Float) /CAST ( Quantity AS Float)) as [UnitPrice] 

在我开始的示例中工作正常,但是如果查询整个数据库,我会得到

  

除以零错误。

那是我的第一个问题。当我没有收到该错误时,第二个问题是SalesPrice显示为负数,而我使用*-1显示为正数。

是否可以使用[UnitPrice]做同样的事情?

它需要显示为肯定。

3 个答案:

答案 0 :(得分:1)

我不知道您为什么会得到负数,但是请使用NULLIF()来防止被零除:

CAST(SalesPrice AS Float) / NULLIF(CAST( Quantity AS Float), 0) as [UnitPrice] 

您可以使用ABS()从其他任何数字中获取正数。

答案 1 :(得分:0)

您可以使用CASE有条件地执行您的功能。例如,

CASE 
    WHEN Quantity = 0 then 0
    ELSE ABS(CAST(SalesPrice AS Float) / CAST(Quantity AS Float))
END as [UnitPrice]

请注意,将ABS包裹在除法结果上以获得正数。

答案 2 :(得分:0)

我不确定您为什么将SalesPrice和Quantity转换为Float。根据它们的名称,它们都应该是某种数字数据类型。

SELECT ABS(SalesPrice / NULLIF(Quantity, 0)) as [UnitPrice] FROM MyTable;

这应将任何被0除的错误转换为NULL结果。并且还应确保每个结果都是肯定的。