मैं उपयोगकर्ता द्वारा बनाए गए कार्यों से संबंधित MySQL में कुछ अजीब व्यवहार देख रहा हूं। मैं जितना संभव हो इसे सरल बना दूंगा।MySQL फ़ंक्शन - अजीब विभाजन परिणाम?
mysql> SELECT 1/50
+--------+
| 1/50 |
+--------+
| 0.0200 |
+--------+
1 row in set (0.00 sec)
अब तक इतना अच्छा है। अब मैं इस प्रभाग को करने के लिए एक फ़ंक्शन बनाता हूं और फ़ंक्शन को कॉल करता हूं:
mysql> delimiter $$
mysql> create function myd(var decimal) returns decimal language sql deterministic
-> begin
-> declare res decimal;
-> set res = var/50;
->
-> return res;
-> end
-> $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select myd(1);
+--------+
| myd(1) |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
बहुत अजीब। ठीक है, के कुछ अन्य मूल्यों की कोशिश करते हैं:
mysql> select myd(10), myd(20), myd(50), myd(70), myd(100);
+---------+---------+---------+---------+----------+
| myd(10) | myd(20) | myd(50) | myd(70) | myd(100) |
+---------+---------+---------+---------+----------+
| 0 | 0 | 1 | 1 | 2 |
+---------+---------+---------+---------+----------+
1 row in set (0.00 sec)
मैं थोड़ा और अधिक परीक्षण किया था - लेकिन यह परिणाम है कि समारोह का परिणाम मान एक पूर्णांक तक पूर्ण किया जा रहा है से बहुत स्पष्ट है, समारोह के रूप में घोषित किए जाने के बावजूद returns decimal
। मैंने टाइप decimal
को float
के साथ बदलने की कोशिश की लेकिन यह थोड़ा सा नहीं बदला।
तो यह गोल क्यों हो रहा है और, सबसे महत्वपूर्ण बात यह है कि मैं इसे कैसे रोकूं?
आह! ठीक है, मुझे देखने दो :) –
कूल! वह यह था। –