Добавить и вычесть значения с плавающей запятой из базы данных

Итак, у меня есть этот запрос, чтобы получить результаты из таблиц моей базы данных со столбцами in и out.

<cfquery name="getInfo" datasource="testing">
    select in, out from test
</cfquery>

Теперь мне нужно взять статическое число, например; 100, ДОБАВЬТЕ in и ВЫЧИТАЙТЕ out из этого статического числа.

Итак, вот что я пробовал:

<cfquery name="getInfo" datasource="testing">
    select in, out from test
</cfquery>

<table>
    <cfset balance = 100>
    <cfloop query="getInfo">

    <cfset balance = balance + in - out> <!--- THIS IS WHAT I TRIED --->

    <tr>

        <td>#in#</td>
        <td>#out#</td>
        <td>#balance#</td>

    </tr>
    </cfloop>
</table>

Итак, как видите, я установил этот код <cfset balance = 100 + in - out>. В основном то, что я пытаюсь сделать, это получить исходное значение баланса, равное 100, добавить значения входа и вычесть значение выхода и сохранить его как новый баланс.

Однако я получаю сообщение об ошибке The value '' cannot be converted to a number..

Я установил значения для входа и выхода, чтобы они были плавающими в базе данных.

Где я ошибаюсь?


person Gosi    schedule 06.03.2017    source источник
comment
Не используйте приблизительные типы, такие как float, для представления валюты. Вместо этого используйте точный тип данных, например decimal.   -  person Leigh    schedule 06.03.2017


Ответы (1)


Вам нужно обновить свой запрос, чтобы охватить условия NULL

<cfquery name="getInfo" datasource="testing">
  select ISNULL([in], 0) AS [in], ISNULL([out], 0) AS [out]
  FROM test
</cfquery>

Также я заключаю квадратные скобки вокруг in и out, потому что они могут быть ключевыми словами.

Также рассмотрите возможность выполнения математики в БД, вы можете повысить производительность.

person James A Mohler    schedule 06.03.2017
comment
Я добавил в базу данных значение по умолчанию 0. Это все еще не работает. - person Gosi; 06.03.2017
comment
Попробуйте определить область balance как variables.balance . Также определите, какое поле все еще выдает пустое после всего этого. Я предлагаю использовать <cfdump var="#getInfo#"> - person James A Mohler; 06.03.2017
comment
RE: добавлено значение по умолчанию 0 в базе данных Это не то, что предложил Джеймс. Обычно применение значения default влияет только на новые записи, вставленные в таблицу. Для изменения значения существующих записей требуется ОБНОВЛЕНИЕ. Альтернативой является просто изменение результатов запроса. Один из способов — использовать функции базы данных, такие как COALESCE(), ISNULL() и т. д., чтобы возвращать ноль (0) вместо null. Точный синтаксис зависит от вашей СУБД. Другой вариант — использовать VAL() в коде CF, который преобразует нечисловые значения в ноль (0). - person Leigh; 06.03.2017