MySQL में FLOOR() तुलना का उपयोग करके केवल दशमलव मान वाली पंक्तियाँ चुनना
किसी न्यूमेरिक कॉलम से केवल वे मान चुनने जिनमें दशमलव भाग हो (यानी पूर्णांक नहीं), FLOOR() फ़ंक्शन के साथ तुलना करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना (DECIMAL टाइप)
mysql> CREATE TABLE DemoTable628 (Value DECIMAL(10,2));
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable628 VALUES(10.97), (20.04), (12.00), (89.56);
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable628;
आउटपुट:
+-------+
| Value |
+-------+
| 10.97 |
| 20.04 |
| 12.00 |
| 89.56 |
+-------+
4 rows in set (0.00 sec)
केवल फ्लोटिंग-पॉइंट मान चुनना (दशमलव भाग ≠ 0)
mysql> SELECT * FROM DemoTable628 WHERE Value != FLOOR(Value);
आउटपुट:
+-------+
| Value |
+-------+
| 10.97 |
| 20.04 |
| 89.56 |
+-------+
3 rows in set (0.00 sec)
कैसे काम करता है:
FLOOR(Value)- मान से कम या बराबर सबसे बड़ा पूर्णांक लौटाता है10.97→FLOOR= 10 →10.97 != 10→ TRUE (चुना गया)20.04→FLOOR= 20 →20.04 != 20→ TRUE (चुना गया)12.00→FLOOR= 12 →12.00 != 12→ FALSE (नहीं चुना गया)89.56→FLOOR= 89 →89.56 != 89→ TRUE (चुना गया)
विकल्प विधियाँ
1. MOD() फ़ंक्शन
SELECT * FROM DemoTable628 WHERE MOD(Value, 1) != 0;
MOD(Value, 1) दशमलव भाग लौटाता है।
2. TRUNCATE() तुलना
SELECT * FROM DemoTable628 WHERE Value != TRUNCATE(Value, 0);
3. CAST तुलना
SELECT * FROM DemoTable628 WHERE Value != CAST(Value AS UNSIGNED);
4. REGEXP (स्ट्रिंग कॉलम के लिए)
SELECT * FROM DemoTable628 WHERE CAST(Value AS CHAR) REGEXP '\\.[1-9]';
केवल पूर्णांक मान चुनना
SELECT * FROM DemoTable628 WHERE Value = FLOOR(Value);
आउटपुट: 12.00
दशमलव भाग निकालना
SELECT Value, Value - FLOOR(Value) AS DecimalPart FROM DemoTable628;
आउटपुट:
+-------+-------------+
| Value | DecimalPart |
+-------+-------------+
| 10.97 | 0.97 |
| 20.04 | 0.04 |
| 12.00 | 0.00 |
| 89.56 | 0.56 |
+-------+-------------+
प्रदर्शन नोट
FLOOR() या MOD() वाला WHERE क्लॉज इंडेक्स उपयोग को रोक सकता है। बड़े टेबल पर, एक जनरेटेड कॉलम पर विचार करें:
ALTER TABLE DemoTable628
ADD COLUMN has_decimal BOOLEAN AS (Value != FLOOR(Value)) STORED,
ADD INDEX idx_has_decimal (has_decimal);