从数据库中添加和减去浮点值

Gos*_*osi 0 sql coldfusion cfquery coldfusion-11

所以我有这个查询来从我的数据库表中获取结果列inout.

<cfquery name="getInfo" datasource="testing">
    select in, out from test
</cfquery>
Run Code Online (Sandbox Code Playgroud)

现在我需要做的是采取一个静态数字,例如; 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>
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,我确实设置了这段代码<cfset balance = 100 + in - out>.基本上我要做的是获得余额的原始值100,并添加in的值并减去out的值并将其保存为新的余额.

但是,我收到一个错误说The value '' cannot be converted to a number..

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

我哪里错了?

Jam*_*ler 5

您需要更新您的查询以涵盖NULL条件

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

我也放了方括号in,out因为它们看起来像是关键词

另外考虑在数据库上进行数学运算,可能会获得更好的性能

  • RE:*在数据库中添加了默认值0*这不是James建议的.通常,应用"default"值只会影响插入表中的*new*记录.更改现有记录的值需要更新.另一种方法是只修改查询结果.一种方法是使用数据库函数,如`COALESCE()`,`ISNULL()`等,返回零(0)而不是'null`.确切的语法取决于您的DBMS.另一种方法是在CF代码中使用`VAL()`,它将非数字值转换为零(0). (4认同)