परिचय
जब एक VARCHAR कॉलम में मिश्रित डेटा (संख्याएं और गैर-संख्याएं) होता है, और आप केवल संख्यात्मक मानों को निकालकर INTEGER कॉलम में अपडेट करना चाहते हैं, तो MySQL के CAST() और CEIL() फंक्शन्स का उपयोग किया जा सकता है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Value VARCHAR(20),
-> UpdateValue INT
-> );
Query OK, 0 rows affected (1.08 sec)
mysql> INSERT INTO DemoTable(Value) VALUES('100');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(Value) VALUES('false');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable(Value) VALUES('true');
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO DemoTable(Value) VALUES('1');
Query OK, 1 row affected (0.07 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-------+-------------+
| Value | UpdateValue |
+-------+-------------+
| 100 | NULL |
| false | NULL |
| true | NULL |
| 1 | NULL |
+-------+-------------+
4 rows in set (0.00 sec)
कास्ट और अपडेट क्वेरी
mysql> UPDATE DemoTable
-> SET UpdateValue = CEIL(CAST(Value AS CHAR(7)));
Query OK, 4 rows affected (0.18 sec)
Rows matched: 4 Changed: 4 Warnings: 0
अपडेट के बाद रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-------+-------------+
| Value | UpdateValue |
+-------+-------------+
| 100 | 100 |
| false | 0 |
| true | 0 |
| 1 | 1 |
+-------+-------------+
4 rows in set (0.00 sec)
व्याख्या
CAST(Value AS CHAR(7))- VARCHAR को CHAR में कास्ट करता है (MySQL में स्ट्रिंग-टू-नंबर कन्वर्जन के लिए)CEIL()- सीलिंग फंक्शन: दशमलव को अगले पूर्णांक में बदलता है- MySQL में गैर-संख्यात्मक स्ट्रिंग ('false', 'true') को संख्या में कास्ट करने पर 0 मिलता है
- संख्यात्मक स्ट्रिंग ('100', '1') सही ढंग से कन्वर्ट हो जाती हैं
बेहतर दृष्टिकोण: केवल संख्यात्मक मान अपडेट करें
यदि आप केवल वास्तविक संख्याओं को अपडेट करना चाहते हैं और गैर-संख्याओं को NULL/0 छोड़ना चाहते हैं:
UPDATE DemoTable
SET UpdateValue = CASE
WHEN Value REGEXP '^[0-9]+$' THEN CAST(Value AS UNSIGNED)
ELSE NULL
END;
यह REGEXP का उपयोग करके केवल अंकों वाली स्ट्रिंग्स की पहचान करता है।