Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में REPLACE() और SUM() से दशमलव हटाकर योग करना

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 पैसा
  • फिक्स्ड-पॉइंट प्रतिनिधित्व जहां स्केल ज्ञात है
  • स्ट्रिंग मैनिपुलेशन अभ्यास
  1. - MySQL में समान तारीख वाले रिकॉर्ड्स का SUM कैसे निकालें?

    GROUP BY DATE() से डेली टोटल निकालना DATETIME कॉलम में स्टोर्ड रिकॉर्ड्स को केवल डेट भाग (समय छोड़कर) के आधार पर ग्रुप करके न्यूमेरिक कॉलम का योग निकालने के लिए GROUP BY DATE() का उपयोग करें। टेबल बनाना और डेटा इन्सर्ट करना CREATE TABLE DemoTable1358 ( PurchaseDate DATETIME, ProductPrice IN

  1. - महीनों की एक श्रृंखला से रिकॉर्ड प्राप्त करने का MySQL क्वेरी?

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1795 ( Name varchar(20), DueDate date ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1795 values(John,2018-07-21); Query OK, 1 row affected (0.00 sec)

  1. - MySQL में LIKE के साथ एकाधिक शब्दों से रिकॉर्ड कैसे फ़िल्टर करें?

    MySQL में किसी कॉलम को एकाधिक पैटर्न/शब्दों के विरुद्ध फ़िल्टर करने के लिए, RLIKE (या REGEXP) ऑपरेटर का उपयोग करें जो रेगुलर एक्सप्रेशन ऑल्टरनेशन (|) सपोर्ट करता है। यह एकाधिक LIKE शर्तों से अधिक संक्षिप्त और लचीला है। उदाहरण: SQL या Python वाले विषय खोजना डेमो टेबल बनाएं: mysql> CREATE TABLE