Tsql SQL检查为零或空
嗨,我有点问题 如果执行某些算法时出错,则需要按列检查是否为null或零 这是一张桌子:Tsql SQL检查为零或空,tsql,conditional-statements,Tsql,Conditional Statements,嗨,我有点问题 如果执行某些算法时出错,则需要按列检查是否为null或零 这是一张桌子: col1 col2 col3 col4 1 0 3376 0 2 600 null 14468.5714 3 null 0 0 4 600 3376 null COALESCE不适用于零“0”值,case太大 我们需要意识到这一点 , CAST(COALESCE(col2, (
col1 col2 col3 col4
1 0 3376 0
2 600 null 14468.5714
3 null 0 0
4 600 3376 null
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
如何以最快的方式解决这个问题。ThanX为什么不直接使用
案例
这样的条件呢
CASE WHEN col2 is not null and col2 <> 0 THEN your_calculation
当col2不为null且col2为0时,您的_计算
您可以使用CASE语句执行子查询,以检查零并返回NULL。
然后可以在子查询上运行当前查询
我发现用例会很难看,因为在COALESCE中有3个表达式
SELECT
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
from
( SELECT case when col2 =0 then NULL else col2 end as col2,
case when col3 =0 then NULL else col3 end as col3,
case when col4 =0 then NULL else col4 end as col4
from Table1) T
虽然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
如果你问我的话,仍然很长,但肯定比用例短。每个表达式中的最后一个null if可能是不必要的,为了保持一致性,我将它们保留在那里。也许您可以在任何地方添加第四个参数
0
,以确保结果永远不会为NULL。您是说需要区分遇到0和NULL吗?我认为“null或0”的解释可能含糊不清。