REPLACE() के साथ दशमलव हटाकर SUM()
स्ट्रिंग कॉलम में संग्रहीत संख्याओं से दशमलव बिंदु हटाकर उनका योग करने के लिए REPLACE() को SUM() के अंदर उपयोग करें।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable857(Price VARCHAR(100)); Query OK, 0 rows affected (1.40 sec)
दशमलव वाली स्ट्रिंग्स इन्सर्ट करना
mysql> INSERT INTO DemoTable857 VALUES('50.60'),('40.30.20'),('10.20');
Query OK, 3 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable857;
+----------+ | Price | +----------+ | 50.60 | | 40.30.20 | | 10.20 | +----------+ 3 rows in set (0.00 sec)
दशमलव हटाकर योग करने की क्वेरी
mysql> SELECT SUM(REPLACE(Price, '.', '')) AS SumOfAll FROM DemoTable857;
परिणाम
+----------+ | SumOfAll | +----------+ | 409100 | +----------+ 1 row in set (0.03 sec)
गणना विवरण
| मूल मान | REPLACE(Price, '.', '') | संख्यात्मक मान |
|---|---|---|
| '50.60' | '5060' | 5060 |
| '40.30.20' | '403020' | 403020 |
| '10.20' | '1020' | 1020 |
| कुल | 409100 |
महत्वपूर्ण चेतावनी
दशमलव बिंदु केवल हटाने से मान 100 गुना (या अधिक) हो जाता है।
उदाहरण:
50.60 → 5060 (50.60 का 100 गुना)यह केवल तभी मान्य है जब सभी मानों में समान दशमलव स्थान हों और आप "पैसा पैसे में" गणना कर रहे हों।
सही तरीका: CAST के साथ दशमलव गणना
-- सही दशमलव योग SELECT SUM(CAST(Price AS DECIMAL(10,2))) FROM DemoTable857; -- परिणाम: 101.10 (50.60 + 40.30 + 10.20, लेकिन '40.30.20' एरर देगा)
गंदे डेटा के लिए सफाई क्वेरी
एकाधिक दशमलव बिंदु वाले डेटा ('40.30.20') को हैंडल करने के लिए:
-- केवल पहला दशमलव रखें, बाकी हटाएं SELECT SUM(CAST(REPLACE(Price, '.', '', 1) AS DECIMAL(10,2))) -- MySQL REPLACE तीसरा आर्गुमेंट नहीं लेता -- बेहतर: SUBSTRING_INDEX SELECT SUM(CAST(CONCAT(SUBSTRING_INDEX(Price, '.', 1), '.', SUBSTRING_INDEX(Price, '.', -1)) AS DECIMAL(10,2))) FROM DemoTable857;
सही दृष्टिकोण: डेटा प्रकार सुधारें
-- 1. नया DECIMAL कॉलम जोड़ें
ALTER TABLE DemoTable857 ADD PriceClean DECIMAL(10,2);
-- 2. साफ करके अपडेट करें
UPDATE DemoTable857
SET PriceClean = CAST(REPLACE(Price, '.', '') AS UNSIGNED) / 100
WHERE Price REGEXP '^[0-9]+(\.[0-9]{2})?$'; -- वैध फॉर्मेट
-- 3. अमान्य डेटा मैन्युअल ठीक करें
-- 4. पुराना कॉलम हटाएं, नए का नाम बदलें
उपयोग के मामले (जब REPLACE+SUM मान्य है)
- पैसा पैसे (पैसा) में स्टोर है: '50.60' → 5060 पैसा
- फिक्स्ड-पॉइंट प्रतिनिधित्व जहां स्केल ज्ञात है
- स्ट्रिंग मैनिपुलेशन अभ्यास