4

我有一个脚本可以查询数据库以获取订单信息,然后对该查询进行查询以获取订单总数。代码看起来像这样。

<!--- Retrieve order information from database --->
<CFQUERY  NAME="GetOrder">
  SELECT 
    oi.OrderQty, oi.ItemPrice
  FROM 
    Orders o,
    OrderItems oi, 
  WHERE 
    o.ID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ATTRIBUTES.OrderID#">
    AND o.ID   = oi.OrderID
</CFQUERY>

<!--- Query the GetOrders query to find total $$ --->
<CFQUERY DBTYPE="Query" NAME="GetTotal">
  SELECT SUM(ItemPrice * OrderQty) AS OrderTotal
  FROM GetOrder
</CFQUERY>

数据库中的 itemPrice 和 OrderQty 字段都设置为数字数据类型。由于某种原因,当我运行脚本时出现错误,“查询查询运行时错误。无法在非数字类型上应用二进制数字运算符 [*|/]”

我什至快速检查了查询中的数字是否为数字,并在查询查询之前中止了脚本。我运行的检查看起来像这样。

<cfoutput>
<cfif isnumeric(GetOrder.OrderQty)>1<cfelse>0</cfif>
<cfif isnumeric(GetOrder.ItemPrice)>1<cfelse>0</cfif>
<cfabort>
</cfoutput>

cfifs 的两个结果都返回为“1”

对此的任何帮助将不胜感激。

4

1 回答 1

2

忘记查询的查询并 cfloop 您的查询做同样的事情,最好使用precisionEvaluate()以避免浮点舍入错误。

<cfset orderTotal = 0>
<cfloop query="GetOrder">
    <cfset orderTotal = precisionEvaluate(orderTotal + (ItemPrice * OrderQty))>
</cfloop>

为什么它不起作用可能是因为很多事情。也许您的数据库驱动程序没有返回正确的 sql 类型。

isnumeric代码仅测试字符串是否为数字,而不是查询对象中该字符串的内部表示。

于 2013-12-24T01:21:27.737 回答