MySQL में दशमलव संख्या (फ्लोट/स्ट्रिंग) को दशमलव बिंदु से पहले और बाद के भाग में विभाजित करने के लिए, SUBSTRING_INDEX() के साथ CAST() का उपयोग करें। यह वित्तीय डेटा, माप, और निर्देशांक प्रोसेसिंग के लिए उपयोगी है।
उदाहरण: '100.50' → 100 और 50
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1951 (Value1 VARCHAR(20));
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1951 VALUES
('100.50'), ('70.90'), ('1000.55');
क्वेरी:
mysql> SELECT
CAST(SUBSTRING_INDEX(Value1, '.', 1) AS UNSIGNED) AS FirstValue,
CAST(SUBSTRING_INDEX(Value1, '.', -1) AS UNSIGNED) AS SecondValue
FROM DemoTable1951;
आउटपुट:
+------------+-------------+ | FirstValue | SecondValue | +------------+-------------+ | 100 | 50 | | 70 | 90 | | 1000 | 55 | +------------+-------------+
फंक्शन व्याख्या
SUBSTRING_INDEX(str, delim, count)
count > 0: डेलिमीटर केcountवें घटना से पहले का सबस्ट्रिंगcount < 0: डेलिमीटर के|count|वें घटना के बाद का सबस्ट्रिंगSUBSTRING_INDEX('100.50', '.', 1)→ '100' (पहले '.' से पहले)SUBSTRING_INDEX('100.50', '.', -1)→ '50' (अंतिम '.' के बाद)
CAST(... AS UNSIGNED)
- स्ट्रिंग को अनसाइन्ड इंटीजर में बदलता है
- अग्रणी शून्य हटाता है ('050' → 50)
- अमान्य संख्या के लिए 0 लौटाता है
दशमलव परिशुद्धता बनाए रखने के लिए
-- स्ट्रिंग के रूप में रखें (अग्रणी शून्य संरक्षित)
SELECT
SUBSTRING_INDEX(Value1, '.', 1) AS integer_part,
SUBSTRING_INDEX(Value1, '.', -1) AS decimal_part
FROM DemoTable1951;
-- DECIMAL में कास्ट करें
SELECT
CAST(SUBSTRING_INDEX(Value1, '.', 1) AS DECIMAL(10,0)) AS int_part,
CAST(SUBSTRING_INDEX(Value1, '.', -1) AS DECIMAL(10,0)) AS dec_part
ऋणात्मक संख्या संभालना
-- '-100.50' के लिए
SELECT
CAST(SUBSTRING_INDEX(Value1, '.', 1) AS SIGNED) AS int_part, -- -100
CAST(SUBSTRING_INDEX(Value1, '.', -1) AS UNSIGNED) AS dec_part -- 50
वैकल्पिक: FLOOR और MOD (संख्यात्मक कॉलम के लिए)
-- यदि कॉलम DECIMAL/FLOAT है
SELECT
FLOOR(value) AS int_part,
ROUND((value - FLOOR(value)) * 100) AS dec_part -- 2 दशमलव मानकर
FROM table;
सावधानियां
- दशमलव बिंदु नहीं: SUBSTRING_INDEX पूरी स्ट्रिंग लौटाता है (दूसरा भाग खाली/NULL)
- एकाधिक दशमलव: '1.2.3' → पहला भाग '1', दूसरा '2.3'
- वैज्ञानिक संकेतन: '1.5E2' सही नहीं पार्स होगा
- संस्कृति: कुछ लोकेल में कॉमा (,) दशमलव सेपरेटर है
बेहतर डिज़ाइन
दो अलग कॉलम में स्टोर करें: amount_int INT, amount_dec SMALLINT या DECIMAL(10,2) सिंगल कॉलम में।