2012-05-24 21 views
1

CF8ArrayMin在空值的查詢列上

我正在使用此行來獲取查詢列的MIN值。我只注意到記錄集中的空值導致錯誤。有沒有一種簡單的方法來告訴ArrayMin跳過空值,無需循環使用列並使用所有非空值加載數組?

<cfset temp_data_min = #round(ArrayMin(query_x["some_field"]))#> 

謝謝!

+3

順便說一句:你的''#標記是完全不必要的。 – ale

+0

只是爲了檢查:是否有原因不能排除原始查詢中的空值? –

回答

1

,你可以通過你的陣列循環,並創建一個新的數組,不包含任何空值。然後將ArrayMin函數應用於新數組。

<cfset newArray = []> 
<cfloop index="x" array="#query_x["some_field"]#"> 
    <cfif x NEQ 'null'> 
     <cfset arrayAppend(newArray, x)> 
    </cfif> 
</cfloop> 
<cfset temp_data_min = round(ArrayMin(newArray))> 

未測試

+0

謝謝 - 這工作正常。沒有看到更好的方法。非常感激! – Reno

1

最簡單的方法可能是用該列執行查詢查詢並刪除空值。

<cfquery name="query_x_fixed" dbtype="query"> 
SELECT some_field 
FROM query_x 
WHERE some_field IS NOT NULL 
</cfquery> 

<cfset temp_data_min= round(ArrayMin(query_x_fixed["some_field"]))> 

(未測試)

5

大廈掉什麼鋁與使用查詢的查詢,只需添加敏說()調用到查詢。

<cfquery name="query_x_fixed" dbtype="query"> 
SELECT Min(some_field) as some_field 
FROM query_x 
WHERE some_field IS NOT NULL 
</cfquery> 

<cfset temp_data_min = round(query_x_fixed.some_field)> 

測試由列轉換成一個列表,然後到一個數組中CF9

+0

啊。更優雅。 – ale

1

工作可以保持該溶液在一行。 ListToArray默認爲忽略空列表項,這是空值將是什麼。

<cfset temp_data_min = Round(ArrayMin(ListToArray(ValueList(query_x.some_field, Chr(7)), Chr(7))))> 

這應該比任何其他建議的解決方案更快,代碼少。

我已經爲使用逗號作爲數字中的小數點分隔符的語言環境指定了分隔符。如果您在美國或使用「。」的其他語言環境中那麼你可以刪除分隔符參數。

使用的附加功能: