SQL 检查为零或空

Hur*_*ane 4 t-sql conditional-statements

嗨,我有一些问题

如果某些算法有问题,需要按列检查是否为空或零

这是一张桌子:

col1    col2    col3    col4
1        0      3376    0
2       600     null    14468.5714
3       null    0       0
4       600     3376    null
Run Code Online (Sandbox Code Playgroud)

COALESCE零“0”值不起作用,case它太大了

需要意识到其中的一些

, CAST(COALESCE(col2, (col3/7), (col4/30)) as money) col2
, CAST(COALESCE(col3, (col2*7), (col4/30*7))as money) col3
, CAST(COALESCE(col4, (col3/7*30),(col2*30))as money) col4 
Run Code Online (Sandbox Code Playgroud)

如何以最快的方式解决这个问题。比X

And*_*y M 5

COALESCE 允许您用特定值替换 NULL,而 NULLIF 将允许您用 NULL 替换特定值。您可以在 0 上使用后者并最终得到如下结果:

, CAST(
    COALESCE(
      NULLIF(col2, 0),
      NULLIF(col3, 0) / 7,
      NULLIF(col4, 0) / 30
    ) AS money
  ) AS col2
, CAST(
    COALESCE(
      NULLIF(col3, 0),
      NULLIF(col2, 0) * 7,
      NULLIF(col4, 0) / 30 * 7)
    ) AS money
  ) AS col3
, CAST(
    COALESCE(
      NULLIF(col4, 0),
      NULLIF(col3, 0) / 7 * 30,
      NULLIF(col2, 0) * 30
    ) AS money
  ) AS col4
Run Code Online (Sandbox Code Playgroud)

如果你问我的话,仍然相当长,但绝对比使用 CASE 短。每个表达式中的最后一个 NULLIF 可能是不必要的,我将它们留在那里以保持一致性。也许您可以添加第四个参数0,以确保结果永远不会为 NULL。


Rah*_*hul 3

为什么不直接使用CASE像这样的条件

CASE WHEN col2 is not null and col2 <> 0 THEN your_calculation
Run Code Online (Sandbox Code Playgroud)