Coldfusion查询数据库获取最接近的数字

时间:2013-09-18 05:00:50

标签: sql sql-server tsql coldfusion

我试图解决烦人的查询问题。

<cfset url.qty = "61000">
<cfset url.pages = "16">
<cfquery name="getCosts" datasource="#request.DSN#">
        SELECT ID, publication,pages,quantity, cover, cost, run_ons,run_backs, stock
        FROM calculator_data
        WHERE publication = <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.publication#">
            <cfif url.qty IS NOT "">
            AND quantity = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.qty#">
            </cfif>
            <cfif url.pages IS NOT "">
            AND pages = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.pages#">
            </cfif>
        </cfquery>

我想做的是传递一个说法

61000,然后检索最接近的值,这样我就可以通过coldfusion进行一些额外的计算。

我在数据库中的范围每10,000个左右存在,所以当我使用上面的代码进行查询时,所有我回来的都是一个空的查询对象。

理想情况下,如果我查询它 61,000我希望得到60,000,然后我可以用它作为我的基础进行额外的计算

关于如何获得最接近我要查询的值的数字的任何想法?

提前致谢

2 个答案:

答案 0 :(得分:3)

我对ColdFusion一无所知,但我认为这应该有效。我无法理解应该匹配哪个列61000。所以我将 qty 作为示例列名。只需使用您的真实专栏而不是数量

SELECT TOP 1 * FROM [calculator_data] 
Where qty < 61000
ORDER BY qty Desc

答案 1 :(得分:0)

试试这个:

<cfset url.qty = "61000">
<cfset url.pages = "16">
<cfquery name="getCosts" datasource="#request.DSN#">
    SELECT ID, publication,pages,quantity, cover, cost, run_ons,run_backs, stock
    FROM calculator_data
    WHERE publication = <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.publication#">
        <cfif url.qty IS NOT "">
        AND quantity < <cfqueryparam cfsqltype="cf_sql_integer" value="#url.qty#">
        </cfif>
        <cfif url.pages IS NOT "">
        AND pages = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.pages#">
        </cfif>
    </cfquery>

以下行已更改:

AND quantity < <cfqueryparam cfsqltype="cf_sql_integer" value="#url.qty#">