Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何解决group by中的“将数据类型varchar转换为数字时出错”?_Asp.net_Sql_Sql Server 2008 - Fatal编程技术网

Asp.net 如何解决group by中的“将数据类型varchar转换为数字时出错”?

Asp.net 如何解决group by中的“将数据类型varchar转换为数字时出错”?,asp.net,sql,sql-server-2008,Asp.net,Sql,Sql Server 2008,如何解决将数据类型varchar转换为数值时出现的错误。我已经尝试过了 SET ANSI_WARNINGS off; 但只有警告信息消失了,但错误仍然存在。 我的代码是 SELECT tblLogin.FullName, SUM(CAST(tblDetails.Productivity_Hours AS decimal(9,2))) AS [hours] FROM tblTaskDetails INNER JOIN tbltsheet ON tblTaskShe

如何解决将数据类型varchar转换为数值时出现的错误。我已经尝试过了

        SET ANSI_WARNINGS off; 
但只有警告信息消失了,但错误仍然存在。 我的代码是

SELECT tblLogin.FullName,
       SUM(CAST(tblDetails.Productivity_Hours AS decimal(9,2))) AS [hours]
FROM tblTaskDetails
INNER JOIN tbltsheet ON tblTaskSheet.TaskId=tblDetails.TaskId
INNER JOIN tblLogin ON tblLogin.UserId=tblTaskSheet.UserId
INNER JOIN tblTCategory ON tblDetails.CatId=tblTCategory.CatId
WHERE dbo.tbltsheet.TaskDate>= '12/28/2013'
  AND tbltsheet.TaskDate<='12/31/2013'
  AND tblTCategory.CatName LIKE 'abc'
GROUP BY tblLogin.FullName
ORDER BY [hours] DESC

尝试查找无法转换为数字的值:

select Productivity_Hours from tblDetails where ISNUMERIC(Productivity_Hours)=0
此外,您还可以使用CASE语句来避免这些错误值,并将它们接受为0值:

SELECT tblLogin.FullName,
       SUM(CASE WHEN ISNUMERIC(tblDetails.Productivity_Hours)=1  
                     THEN CAST(tblDetails.Productivity_Hours AS decimal(9,2))
                     ELSE 0
                END
        ) AS [hours]
FROM ....

尝试查找无法转换为数字的值:

select Productivity_Hours from tblDetails where ISNUMERIC(Productivity_Hours)=0
此外,您还可以使用CASE语句来避免这些错误值,并将它们接受为0值:

SELECT tblLogin.FullName,
       SUM(CASE WHEN ISNUMERIC(tblDetails.Productivity_Hours)=1  
                     THEN CAST(tblDetails.Productivity_Hours AS decimal(9,2))
                     ELSE 0
                END
        ) AS [hours]
FROM ....
使用IsNumeric验证您的类型

   WHERE dbo.tbltsheet.TaskDate>= '12/28/2013'
      AND tbltsheet.TaskDate<='12/31/2013'
      AND tblTCategory.CatName LIKE 'abc'
      AND ISNUMERIC(tblDetails.Productivity_Hours) =1
使用IsNumeric验证您的类型

   WHERE dbo.tbltsheet.TaskDate>= '12/28/2013'
      AND tbltsheet.TaskDate<='12/31/2013'
      AND tblTCategory.CatName LIKE 'abc'
      AND ISNUMERIC(tblDetails.Productivity_Hours) =1

为什么不找到问题的根源,以正确的格式存储数字数据,而不是每次使用时都要验证和转换数据?Aaron Bertrand写了一篇很好的文章,阐述了为什么不找到问题的根源,以正确的格式存储数值数据,而不是每次使用时都要验证和转换数据?Aaron Bertrand就此写了一篇很好的文章,值得注意的是,ISNUMERIC将为9999返回1,因为逗号字符仍然可以是数字,但它们不会转换为十进制。在转换之前,您可以尝试替换以删除有问题的值,而不是咀嚼该值。@user3056839您可以检查它是否为十进制。您可以使用ISNUMERICtblDetails.Productivity\u Hours+'e0'。值得注意的是,ISNUMERIC将为9999返回1,因为逗号字符仍然可以是数字,但不会转换为十进制。在转换之前,您可以尝试替换以删除有问题的值,而不是咀嚼该值。@user3056839您可以检查它是否为十进制。您可以使用ISNUMERICtblDetails.Productivity\u Hours+'e0'。