MySQL में REPLACE और CAST का उपयोग करके स्ट्रिंग से संख्या निकालना
जब एक स्ट्रिंग में एक ज्ञात पैटर्न में संख्या एम्बेडेड होती है, तो आप अवांछित भागों को हटाने के लिए REPLACE() का उपयोग कर सकते हैं और फिर CAST() का उपयोग करके परिणाम को संख्या में बदल सकते हैं।
टेबल बनाना
mysql> CREATE TABLE DemoTable1961 (
-> Title TEXT
-> );
Query OK, 0 rows affected (0.00 sec)
जटिल स्ट्रिंग के साथ डेटा डालना
mysql> INSERT INTO DemoTable1961 VALUES (
-> 'You_can_remove_the_string_part_only-10001-But_You_can_not_remove_the_numeric_parts'
-> );
Query OK, 1 row affected (0.00 sec)
मूल डेटा
mysql> SELECT * FROM DemoTable1961;
+------------------------------------------------------------------------------------+
| Title |
+------------------------------------------------------------------------------------+
| You_can_remove_the_string_part_only-10001-But_You_can_not_remove_the_numeric_parts |
+------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
संख्या निकालने का क्वेरी
mysql> SELECT CAST(
-> REPLACE(
-> REPLACE(
-> 'You_can_remove_the_string_part_only-10001-But_You_can_not_remove_the_numeric_parts',
-> 'You_can_remove_the_string_part_only-', ''
-> ),
-> '-But_You_can_not_remove_the_numeric_parts', ''
-> ) AS UNSIGNED
-> ) AS Output
-> FROM DemoTable1961;
परिणाम
+--------+
| Output |
+--------+
| 10001 |
+--------+
1 row in set (0.00 sec)
चरण-दर-चरण विश्लेषण
- आंतरिक REPLACE: प्रीफिक्स हटाता है
'You_can_remove_the_string_part_only-'→'10001-But_You_can_not_remove_the_numeric_parts' - बाहरी REPLACE: सफ़िक्स हटाता है
'-But_You_can_not_remove_the_numeric_parts'→'10001' - CAST(... AS UNSIGNED): स्ट्रिंग को अनसाइन्ड इंटीजर में बदलता है
सामान्य पैटर्न: ज्ञात प्रीफिक्स/सफ़िक्स हटाना
CAST(
REPLACE(
REPLACE(full_string, 'known_prefix_', ''),
'_known_suffix', ''
) AS UNSIGNED
)
अधिक मजबूत दृष्टिकोण: REGEXP (MySQL 8.0+)
-- केवल अंक निकालें
SELECT CAST(REGEXP_SUBSTR(Title, '[0-9]+') AS UNSIGNED) AS Number
FROM DemoTable1961;
-- या REGEXP_REPLACE के साथ (MySQL 8.0.17+)
SELECT CAST(REGEXP_REPLACE(Title, '[^0-9]', '') AS UNSIGNED) AS Number
FROM DemoTable1961;
पुराने MySQL संस्करणों के लिए: उपयोगकर्ता-परिभाषित फ़ंक्शन
CREATE FUNCTION ExtractNumber(input VARCHAR(255))
RETURNS INT DETERMINISTIC
BEGIN
DECLARE output VARCHAR(255) DEFAULT '';
DECLARE i INT DEFAULT 1;
DECLARE c CHAR(1);
WHILE i <= LENGTH(input) DO
SET c = SUBSTRING(input, i, 1);
IF c BETWEEN '0' AND '9' THEN
SET output = CONCAT(output, c);
END IF;
SET i = i + 1;
END WHILE;
RETURN CAST(output AS UNSIGNED);
END;
CAST लक्ष्य प्रकार
| प्रकार | विवरण | रेंज |
|---|---|---|
| SIGNED | हस्ताक्षरित पूर्णांक | -2147483648 से 2147483647 |
| UNSIGNED | अहस्ताक्षरित पूर्णांक | 0 से 4294967295 |
| DECIMAL(m,d) | स्थिर-बिंदु संख्या | परिशुद्धता/स्केल |
| CHAR(N) | निश्चित-लंबाई स्ट्रिंग | N वर्ण |
संबंधित स्ट्रिंग फ़ंक्शन
SUBSTRING_INDEX(): विभाजक द्वारा विभाजन (पिछला लेख देखें)SUBSTRING(): स्थिति/लंबाई द्वारा निष्कर्षणLOCATE()/INSTR(): उपस्ट्रिंग स्थिति खोजेंTRIM(): अग्रणी/अनुगामी वर्ण हटाएं
चेतावनी
यह दृष्टिकोण स्थिर/ज्ञात पैटर्न के लिए काम करता है। परिवर्तनीय पैटर्न के लिए, REGEXP या एप्लिकेशन-स्तरीय पार्सिंग का उपयोग करें।