在SQL中防止Divide By Zero错误的简单方法

Den*_*els 12 sql t-sql sql-server-2005 sql-server-2008

我有一个SQL查询,用于导致

除以零例外

我把它包装在CASE声明中以阻止这种情况发生.有更简单的方法吗?

这是我的代码:

Percentage =  CASE WHEN AttTotal <> 0 THEN (ClubTotal/AttTotal) * 100 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)

Tom*_*ler 39

一个更好的方法是使用这样的NULLIF:

Percentage =  100 * ClubTotal / NULLIF(AttTotal, 0)
Run Code Online (Sandbox Code Playgroud)

  • @NenadZivkovic - 尽管如此,为零除错返回"NULL"可能会更具数学意义. (4认同)
  • 如果`AttTotal = 0`,这将返回`NULL`,而有问题的查询返回0. (3认同)

Pio*_*ski 7

我的用法NULLIF有点不同,因为在某些情况下我必须返回一些值.通常,当存在除零误差时,我需要返回0.在那种情况下,我将整个表达式包装成ISNULL.所以它会是:

Percentage =  ISNULL(100 * ClubTotal / NULLIF(AttTotal, 0), 0)
Run Code Online (Sandbox Code Playgroud)

评估内部部分NULL,然后ISNULL将其替换为0.


i-o*_*one 5

Percentage =  IsNull(ClubTotal/NullIf(AttTotal, 0) * 100, 0)
Run Code Online (Sandbox Code Playgroud)