2017-03-06 52 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