MySQL/SQL में VARCHAR (स्ट्रिंग) को संख्यात्मक टाइप (DOUBLE, DECIMAL) में बदलने के लिए CAST() फंक्शन का उपयोग करें।
सिंटैक्स
SELECT CAST(yourVarcharColumn AS DECIMAL(10,2)) AS numericColumn FROM yourTableName;
पैरामीटर
DECIMAL(precision, scale)- precision = कुल अंक, scale = दशमलव के बाद के अंकDECIMAL(10,2)= अधिकतम 10 अंक, 2 दशमलव स्थान (उदाहरण: 99999999.99)DOUBLEभी उपयोग कर सकते हैं लेकिन DECIMAL सटीक है
उदाहरण के साथ समझें
टेबल बनाएं (Amount VARCHAR में):
CREATE TABLE VarcharToDouble (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
Amount VARCHAR(10),
PRIMARY KEY(Id)
);
स्ट्रिंग के रूप में संख्याएं डालें:
INSERT INTO VarcharToDouble(Name, Amount) VALUES('John', '456.78');
INSERT INTO VarcharToDouble(Name, Amount) VALUES('Larry', '8465.98');
INSERT INTO VarcharToDouble(Name, Amount) VALUES('Mike', '9083.45');
INSERT INTO VarcharToDouble(Name, Amount) VALUES('Sam', '46475.50');
INSERT INTO VarcharToDouble(Name, Amount) VALUES('Carol', '10003.35');
सभी रिकॉर्ड देखें:
SELECT * FROM VarcharToDouble;
आउटपुट:
+----+-------+----------+
| Id | Name | Amount |
+----+-------+----------+
| 1 | John | 456.78 |
| 2 | Larry | 8465.98 |
| 3 | Mike | 9083.45 |
| 4 | Sam | 46475.50 |
| 5 | Carol | 10003.35 |
+----+----------+
VARCHAR को DECIMAL में बदलें और क्रमबद्ध करें
SELECT Id, Name, CAST(Amount AS DECIMAL(10,2)) AS TotalAmount
FROM VarcharToDouble
ORDER BY TotalAmount DESC;
परिणाम (संख्यात्मक क्रम में):
+----+-------+------------+
| Id | Name | TotalAmount|
+----+-------+------------+
| 5 | Carol | 10003.35 |
| 4 | Sam | 46475.50 |
| 3 | Mike | 9083.45 |
| 2 | Larry | 8465.98 |
| 1 | John | 456.78 |
+----+-------+------------+
महत्वपूर्ण: स्ट्रिंग क्रम vs संख्यात्मक क्रम
| स्ट्रिंग क्रम (VARCHAR) | संख्यात्मक क्रम (DECIMAL) |
|---|---|
| 10003.35 | 456.78 |
| 456.78 | 8465.98 |
| 46475.50 | 9083.45 |
| 8465.98 | 10003.35 |
| 9083.45 | 46475.50 |
स्ट्रिंग क्रम में '1' '4' से छोटा है, इसलिए 10003 पहले आता है। CAST के बाद सही संख्यात्मक क्रम।
अन्य कास्टिंग विकल्प
-- CAST (मानक SQL)
CAST(Amount AS DECIMAL(10,2))
CAST(Amount AS DOUBLE)
CAST(Amount AS SIGNED) -- पूर्णांक
CAST(Amount AS UNSIGNED) -- अनसाइन्ड पूर्णांक
-- CONVERT (मानक SQL, अलग सिंटैक्स)
CONVERT(Amount, DECIMAL(10,2))
-- MySQL शॉर्टकट
Amount + 0 -- स्वचालित संख्या में बदलता है
Amount * 1 -- समान
0 + Amount -- समान
अमान्य डेटा हैंडलिंग
-- 'abc' को संख्या में बदलने पर 0 मिलता है (चेतावनी के साथ)
SELECT CAST('abc' AS DECIMAL(10,2)); -- 0.00
-- सुरक्षित तरीका: CASE के साथ
SELECT CASE
WHEN Amount REGEXP '^[0-9]+(\.[0-9]+)?$'
THEN CAST(Amount AS DECIMAL(10,2))
ELSE NULL
END AS safe_amount
FROM VarcharToDouble;
नोट
DECIMALसटीक अंकगणित के लिए (वित्तीय डेटा)DOUBLE/FLOATअनुमानित, वैज्ञानिक गणना के लिएCASTANSI SQL मानक,CONVERTभी मानक- बड़े डेटासेट पर कास्टिंग प्रदर्शन प्रभाव डाल सकती है