ISNULL() 函数需要两个参数?简单的解决方案

Posted

技术标签:

【中文标题】ISNULL() 函数需要两个参数?简单的解决方案【英文标题】:ISNULL() function requires two arguments? Simple solution 【发布时间】:2012-06-06 14:55:11 【问题描述】:

我在 ISNULL() 函数中放错了一些东西,需要另一双眼睛才能找到它。我已经盯着它看太多了,我已经变得脑残了(我知道 ISNULL() 是什么,这只是一个简单的语法错误)

(SELECT tn.teamtext, tn.teamid, ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end), 0), 0) AS cnt3
  FROM teamnames AS tn 
    LEFT OUTER JOIN caseaudit AS ca
    ON tn.teamID = ca.referteamID2
  WHERE ca.referteamid1 <> ca.referteamid2 AND isactive = 1 AND groupid = 18 AND accountid = 2 AND referteamid1 = 31 AND auditnote <> 'Suspend Case'
  GROUP BY tn.teamtext, tn.teamid) AS c

【问题讨论】:

@jpm0004,您的问题模棱两可,因为正文中没有明确说明您需要什么帮助。我们不知道您是否真正理解 ISNULL() 应该做什么,或者您是否只是需要帮助来追踪语法错误。下次不要急于求成,请尝试帮助我们帮助您。 好的,我编辑了。我认为这个问题已被理解,但我理解它可能令人困惑。对不起大家!感谢您的帮助! 【参考方案1】:

ISNULL() 函数需要两个参数,您可以在此处看到:

http://msdn.microsoft.com/library/ms184325.aspx

第一个是正在测试的表达式,第二个是如果测试的表达式计算结果为NULL,则返回的值。

您的第二个ISNULL() 函数只指定了一个参数:

ISNULL(case when CONVERT(smalldatetime,dModLast,101) 
       BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end)

你应该试试:

ISNULL((case when CONVERT(smalldatetime,dModLast,101) 
       BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end), 0)

【讨论】:

+1 这是一个更好的答案,附有参考资料。【参考方案2】:

试试这个:

(SELECT tn.teamtext, tn.teamid, ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end, 0)), 0) AS cnt3
  FROM teamnames AS tn 
    LEFT OUTER JOIN caseaudit AS ca
    ON tn.teamID = ca.referteamID2
  WHERE ca.referteamid1 <> ca.referteamid2 AND isactive = 1 AND groupid = 18 AND accountid = 2 AND referteamid1 = 31 AND auditnote <> 'Suspend Case'
  GROUP BY tn.teamtext, tn.teamid) AS c

【讨论】:

如果您能解释问题所在并可能引用参考资料会更好。【参考方案3】:

你在错误的地方有一个括号:

ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end , 0)), 0) AS cnt3

CASE 声明“结束”后的通知

【讨论】:

【参考方案4】:

这就是答案……我想通了。

注意区别……

原文: ISNULL(sum(ISNULL(convert(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end), 0), 0)

修订 ISNULL(sum(ISNULL(convert(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end, 0)), 0)

【讨论】:

发布答案后...似乎有 3 个人在我之前回答...他们都是正确的。谢谢大家!

以上是关于ISNULL() 函数需要两个参数?简单的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

MySQLMySQL的IFNULL()ISNULL()NULLIF()函数用法说明

ISNULL做简单的显示字段逻辑

mysql几个常用的判空函数:isnull, ifnull, nullif, coalesce

MS SQL server中的isnull函数

diff()函数---useR!

SqlSever基础 isnull 将null替换成指定字符串