|
Тема
|
Странен mySQL
|
|
Автор |
нeщacтeн (gan.hit.bg) |
Публикувано | 10.10.03 18:34 |
|
Имам структура на таблица 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
Някой да се сеща защо по дяволите???
- шантаво като теб ;)
| |
|
По мое мнение пробвай
SELECT Total, Paid, Refund, Total-Paid-Refund AS Debt
FROM Invoice
WHERE Debt > 0
или
HAVING Debt >0
E tuk ni6to niama :
| |
Тема
|
Re: Странен mySQL
[re: нeщacтeн]
|
|
Автор |
salle (един такъв) |
Публикувано | 11.10.03 10:38 |
|
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)
| |
|
Ако напишеш WHERE Debt > 0 ще получиш
Unknown column 'Debt' in 'where clause'
- шантаво като теб ;)
| |
Тема
|
Re: Странен mySQL
[re: salle]
|
|
Автор |
нeщacтeн (gan.hit.bg) |
Публикувано | 11.10.03 14:50 |
|
Това е добре, но при мен излизат 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 е специално проектиран за работа с пари
и НЕ ТРЯБВА ДА ПРАВИ ТАКА!
Дали става въпрос за бъг?
- шантаво като теб ;)
| |
|
|
|
|