如何使用servlet和jsp获取Null值查询表达式

时间:2017-06-08 06:50:19

标签: java sql-server jsp

我需要在包含NoOfErrorsNoOfAudited列的表格中的SQL server数据库表中计算和检索数据。

我需要根据这些列计算准确度。

我有这样的查询

select 
   a.id, 
   (100-((a.NoOfErrors*100)/ NULLIF(a.NoOfAudited,0))) as Accuracy 
from Table1 a 
 join Table2 pd 
   on a.batchid=pd.id 
where 
  a.charge='"+Poster+"' and status=1 

仅当NoOfErrorsNoOfAudited列包含某些值时,才会执行上述查询。

我拥有所有值,但如果NoOfErrorsNoOfAudited列中的任何一个值包含Null值,则它不会检索任何数据,并显示{ {1}}。

  

ResultSet数据不接受空值

如何通过在jsp表中将null替换为空来使查询接受空值并检索数据?

1 个答案:

答案 0 :(得分:0)

此行存在问题,应予以纠正。

   (100-((a.NoOfErrors*100)/ NULLIF(a.NoOfAudited,0))) as Accuracy 

问题#1

NULLIF(a.NoOfAudited,0)

如果NoOfAuditedNULL,则表达式将返回0;基本上你除以零。这应该替换为1,如下所示

NULLIF(a.NoOfAudited,1)

问题#2

不检查 NoOfErrors 列的NULL值。 在SQL Server中,大多数NULL算术结果为NULL。 例如,以下所有查询都会产生NULL

select 100-NULL*100/0
select NULL*100
select NULL/0
select 100-NULL

因此,只要NULLAccuracy

,您就会NoOfErrors获得NULL (100-((COALESCE(a.NoOfErrors,0)*100)/ COALESCE(a.NoOfAudited,1))) as Accuracy

要更正此部分,您应该编写类似

的查询表达式
NULLIF

请注意,我已将COALESCE替换为符合ANSI的select a.id, case when COALESCE(a.NoOfErrors,a.NoOfAudited,'') ='' then'' else CAST((100-((COALESCE(a.NoOfErrors,0)*100)/ COALESCE(a.NoOfAudited,1))) as VARCHAR(10))as Accuracy end from Table1 a join Table2 pd on a.batchid=pd.id where a.charge='"+Poster+"' and status=1 ,并且将在SQL服务器和MySQL上运行

<强> TLDR;

您的查询应该像

messaging.onMessage()