我有一个脚本,用于查询数据库中的订单信息,然后查询该查询以获取订单总数。代码看起来像这样。
<!--- 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”
对此的任何帮助将不胜感激。
答案 0 :(得分:2)
忘记查询查询并使用cfloop查询来执行相同的操作,最好使用precisionEvaluate()
来避免浮点舍入错误。
<cfset orderTotal = 0>
<cfloop query="GetOrder">
<cfset orderTotal = precisionEvaluate(orderTotal + (ItemPrice * OrderQty))>
</cfloop>
为什么它不起作用可能是因为很多事情。也许你的数据库驱动程序没有返回正确的sql类型。
isnumeric
代码仅测试字符串是否为数字,而不是查询对象中该字符串的内部表示。