将DateDiff与null值一起使用

时间:2017-08-25 16:03:33

标签: c# sql

我在C#中使用下面的SQL语句。

x.reverse() 

当由于数据过滤而没有可用行时,它会抛出错误:'对象无法从DBNull转换为其他类型'。我认为它与DATEDIFF部分有问题。我希望它在存在空值时显示值0。它似乎仍然返回一个空值。当有实际行从中提取数据时,代码工作正常。 代码在c#的以下部分中调用:

string ConsultDiff = 
  @"SELECT AVG(ISNULL(DATEDIFF(DAY, Consult_Date, Start_Date),0)) 
     FROM patients 
    WHERE progression = 'CO' AND Plan_Type = 'New Patient' " + 
     Site + " " + Primary_Onc + " " + Type + " " + DateRange + "";

3 个答案:

答案 0 :(得分:2)

尝试制作:

var result = cmd3.ExecuteScalar();
int countConsultDiff = Convert.IsDBNull(result) ? 0 : Convert.ToInt32(result);

答案 1 :(得分:2)

您的数据库字段在通过查询返回时会包含SQL NULL值,因为它会抛出异常/错误。您可以检查并使用:DBNull.Value并且如果它返回Null值则不执行&# 34;选择或执行查询" 。 您需要检查返回的值以确保它不是DBNull。 您也可以通过将变量声明为可空类型来允许null。

答案 2 :(得分:0)

您可以使用COALESCE。 我不确定bothe是否可以为null但是假设只有1将为null,你应该从中得到它。

DATEDIFF(DAY, COALESCE(Consult_Date, StartDate), COALESCE(Start_Date, Consult_Date)

所以在上面,我相信如果eitehr为null,它将与其他值相同,因此DATEDIFF将为零。

希望它有效并且有所帮助