我怎样才能实现:如果我的数字的前三位小数为0,那么SQL服务器中的数字= 0

时间:2015-06-17 09:47:09

标签: sql-server

如果我的数字的前3位小数为0且数字以0开头,则数字= 0:

示例:

N = 0.0005677 => n = 0(0.00)

N = 0.000055664 => n = 0(0.00)

修改1:

以下是一个示例:

WHERE   ((cc.ID = @ID) OR (@ID IS NULL))
    AND ((cc.carTypeID = @CarTypeID) OR (@CarTypeID IS NULL))
    AND cc.active = 1
    AND lp.Latitude != 0 AND lp.Longitude != 0

第4行:所以在这个存储过程中它不会显示纬度= 0和经度= 0的行,我想在纬度和经度为例如0.000455或0.0000555时实现相同的目的。

P.S。:希望这能让我在第一次发布时清楚地感到遗憾。谢谢大家的回答。

编辑2:

您如何看待这种方法? :

WHERE   ((cc.ID = @ID) OR (@ID IS NULL))
    AND ((cc.carTypeID = @CarTypeID) OR (@CarTypeID IS NULL))
    AND cc.active = 1
    AND CONVERT(NUMERIC(6, 3), lp.Latitude) !=0 AND CONVERT(NUMERIC(6, 3), lp.Longitude)  !=0 

此函数看起来像预期的那样工作,可以用作更通用的方法。

你知道任何不利因素或为什么我不应该使用它?

2 个答案:

答案 0 :(得分:1)

我想你想要这样的东西:

SELECT CASE WHEN @n < 0.001 THEN 0 ELSE @n END

任何小于0.001的数字都以0为整数部分,其小数部分以000开头。

如果您希望以相同的方式处理负数,则可以将@n替换为ABS(@n)

修改

您将查询的WHERE子句表示为:

WHERE ((cc.ID = @ID) OR (@ID IS NULL))
      AND ((cc.carTypeID = @CarTypeID) OR (@CarTypeID IS NULL))
      AND cc.active = 1
      AND lp.Latitude  >= 0.001 
      AND lp.Longitude >= 0.001

上述选择LatitudeLongitude0.000455的值,但选择一个值0.00455

答案 1 :(得分:0)

SQL Server有一个ROUND函数你可以使用,但我猜这不是你想要的。 我想你需要这样的东西:

SELECT CASE WHEN ABS(MyNumericValue) < 0.01 THEN 0.00 ELSE MyNumericValue END
FROM MyTable

使用ABS功能也会处理负数(如果有的话)