2012-05-24 3 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

здание от того, что Аль сказал с помощью запросов запросов из-, просто добавив Min() вызов в запросе.

<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))))> 

Это должно быть быстрее любых других предлагаемых решений и меньше кода.

Я указал разделитель для локалей, которые используют запятую как десятичный разделитель в числах. Если вы находитесь в США или другом регионе, где используется "." то вы можете удалить аргументы разделителя.

Дополнительные функции, используемые:

Смежные вопросы