Странен mySQL
4 отговора
235 прегледа
Странен 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 - шантаво като теб ;)
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 - шантаво като теб ;)
Re: Странен mySQL
По мое мнение пробвай
SELECT Total, Paid, Refund, Total-Paid-Refund AS Debt
FROM Invoice
WHERE Debt > 0
или
HAVING Debt >0
E tuk ni6to niama :[линк]
SELECT Total, Paid, Refund, Total-Paid-Refund AS Debt
FROM Invoice
WHERE Debt > 0
или
HAVING Debt >0
E tuk ni6to niama :[линк]
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
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
Re: Странен mySQL
Ако напишеш WHERE Debt > 0 ще получиш
Unknown column 'Debt' in 'where clause'
asl-bg.com - шантаво като теб ;)
Unknown column 'Debt' in 'where clause'
asl-bg.com - шантаво като теб ;)
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
Предполагам че тези числа не са набити с INSERT с точност до 2-я знак.
Примерно първото не е било 59.49 а 55.4934563... и
mySQL го е закръглил на 59.49.
Излиза обаче, че типът decimal само го показва до 2-я знак, но си го помни до незнам кой си знак. Някой има ли инфо до кой знак точно го помни???
В този случай аз си реших проблема като промених where клаузата на куерито
WHERE Total-Paid-Refund>=0.01 защото става дума за пари.
Но в друг случай едва ли ще бъде приложимо.
Все пак до колкото знам типът decimal е специално проектиран за работа с пари
и НЕ ТРЯБВА ДА ПРАВИ ТАКА!
Дали става въпрос за бъг?
asl-bg.com - шантаво като теб ;)
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 - шантаво като теб ;)