2017-03-06 34 views
0

所以我有这个查询来从我的数据库表中获得结果inout列。从数据库中加上和减去浮点值

<cfquery name="getInfo" datasource="testing"> 
    select in, out from test 
</cfquery> 

现在我需要做的是采取一个静态的数字,例如; 100,并添加in并从该静态数字中减去out

所以这是我的尝试:

<cfquery name="getInfo" datasource="testing"> 
    select in, out from test 
</cfquery> 

<table> 
    <cfset balance = 100> 
    <cfloop query="getInfo"> 

    <cfset balance = balance + in - out> <!--- THIS IS WHAT I TRIED ---> 

    <tr> 

     <td>#in#</td> 
     <td>#out#</td> 
     <td>#balance#</td> 

    </tr> 
    </cfloop> 
</table> 

因此,大家可以看到,我没有设置这个代码<cfset balance = 100 + in - out>。基本上我试图做的是获得100的平衡原始值,并添加in的值并减去out的值并将其保存为新的余额。

但是,我收到错误消息The value '' cannot be converted to a number.

我已经将in和out的值设置为在数据库中浮动。

我哪里错了?

+1

不要使用'float'等近似类型来表示货币。相反,请使用确切的数据类型,如“decimal”。 – Leigh

回答

5

你需要更新你的查询覆盖NULL条件

<cfquery name="getInfo" datasource="testing"> 
    select ISNULL([in], 0) AS [in], ISNULL([out], 0) AS [out] 
    FROM test 
</cfquery> 

而且我把方括号inout,因为它们看起来像他们可能是关键词

也可以考虑做数学上DB,你可能会获得更好的性能

+0

我在数据库中添加了默认值0。它仍然不起作用。 – gosi123

+0

尝试将'balance'范围设为'variables.balance'。在此之后,还要确定哪个字段仍然是空白的。我建议使用'' –

+4

RE:*在数据库中添加默认值0 *这不是James所建议的。通常情况下,应用“默认”值只会影响插入到表中的* new *记录。更改现有记录的值需要更新。另一种方法是只修改查询结果。一种方法是使用数据库函数,例如'COALESCE()','ISNULL()'等等来返回零(0)而不是'null'。确切的语法取决于你的DBMS。另一种方法是在CF代码中使用'VAL()',它将非数字值转换为零(0)。 – Leigh