Странен mySQL

4 отговора 235 прегледа
#1

Странен mySQL

Имам структура на таблица Invoice с полета
Total decimal(9,2) не 0.00
Paid decimal(9,2) не 0.00
Refund decimal(9,2) не 0.00

И няколко реда като този:
Total, Paid, Refund
23.50, 13.50, 10.00

Ето го странното:
SELECT Total, Paid, Refund, Total-Paid-Refund AS Debt
FROM Invoice
WHERE Total-Paid-Refund > 0

Вади и горния ред независимо, че
23.50 - 13.50 - 10.00 = 0

Някой да се сеща защо по дяволите???

asl-bg.com - шантаво като теб ;)
Отговор
в отговор на нeщacтeн #2

Re: Странен mySQL

По мое мнение пробвай
SELECT Total, Paid, Refund, Total-Paid-Refund AS Debt
FROM Invoice
WHERE Debt > 0
или
HAVING Debt >0

E tuk ni6to niama :[линк]
Отговор
в отговор на нeщacтeн #3

Re: Странен mySQL

mysql> create table t (Total decimal(9,2), Paid decimal(9,2), Refund decimal(9,2));
Query OK, 0 rows affected (0.15 sec)

mysql> insert into t values(23.50, 13.50, 10.00);
Query OK, 1 row affected (0.07 sec)

mysql> select Total-Paid-Refund from t;
+-------------------+
| Total-Paid-Refund |
+-------------------+
| 0.00 |
+-------------------+
1 row in set (0.04 sec)

mysql> select Total-Paid-Refund from t where Total-Paid-Refund > 0;
Empty set (0.01 sec)

salle.online.bg/sig
Отговор
в отговор на ro6avia #4

Re: Странен mySQL

Ако напишеш WHERE Debt > 0 ще получиш
Unknown column 'Debt' in 'where clause'

asl-bg.com - шантаво като теб ;)
Отговор
в отговор на salle #5

Re: Странен mySQL

Това е добре, но при мен излизат 10-тина "странни" реда.
SELECT Total, Paid, Refund, Total-Paid-Refund AS Debt FROM `Invoice` WHERE Total-Paid-Refund>0 ORDER BY `Debt` ASC LIMIT 0, 30

Total Paid Refund Debt
55.49 31.49 24.00 0.00
77.93 17.93 60.00 0.00
359.92 323.93 35.99 0.00
111.65 51.65 60.00 0.00
65.87 41.87 24.00 0.00
146.02 68.21 77.81 0.00
216.08 96.08 120.00 0.00
128.99 92.99 36.00 0.00
349.48 316.18 33.30 0.00
401.06 324.03 77.03 0.00
314.81 99.14 215.67 0.00
401.80 200.91 200.89 0.00
427.79 247.79 180.00 0.00
193.78 193.77 0.00 0.01

Предполагам че тези числа не са набити с INSERT с точност до 2-я знак.
Примерно първото не е било 59.49 а 55.4934563... и
mySQL го е закръглил на 59.49.
Излиза обаче, че типът decimal само го показва до 2-я знак, но си го помни до незнам кой си знак. Някой има ли инфо до кой знак точно го помни???

В този случай аз си реших проблема като промених where клаузата на куерито
WHERE Total-Paid-Refund>=0.01 защото става дума за пари.
Но в друг случай едва ли ще бъде приложимо.
Все пак до колкото знам типът decimal е специално проектиран за работа с пари
и НЕ ТРЯБВА ДА ПРАВИ ТАКА!
Дали става въпрос за бъг?

asl-bg.com - шантаво като теб ;)
Отговор