Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แปลง VARCHAR เป็น DOUBLE ใน SQL ด้วย CAST

การแปลง VARCHAR เป็นตัวเลขทศนิยมด้วย CAST

ใช้ CAST() ฟังก์ชันมาตรฐาน SQL เพื่อแปลงสตริงเป็น DECIMAL (MySQL ใช้ DECIMAL แทน DOUBLE สำหรับความแม่นยำ)

ไวยากรณ์

SELECT CAST(yourVarcharColumn AS DECIMAL(precision, scale)) AS numeric_column
FROM yourTableName;
  • precision = จำนวนหลักทั้งหมด (สูงสุด 65)
  • scale = จำนวนหลักหลังจุดทศนิยม (สูงสุด 30, ต้อง ≤ precision)

ตัวอย่างการใช้งาน

สร้างตาราง:

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 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      |
+----+-------+-------------+

ฟังก์ชันแปลงชนิดข้อมูลอื่นๆ

ฟังก์ชันคำอธิบายตัวอย่าง
CAST(expr AS type)มาตรฐาน SQLCAST('123' AS UNSIGNED)
CONVERT(expr, type)มาตรฐาน SQL (ODBC syntax)CONVERT('123', UNSIGNED)
expr + 0MySQL shorthand (implicit conversion)'123' + 0 = 123

ชนิดข้อมูลตัวเลขใน MySQL

Typeช่วงค่า (Signed)Precisionใช้เมื่อไหร่
DECIMAL(p,s)Exact, up to 65 digitsExactเงิน, การเงิน, ต้องแม่นยำ
DOUBLE~±1.79E+308~15 digitsวิทยาศาสตร์, ประมาณการ
FLOAT~±3.40E+38~7 digitsประหยัดพื้นที่, ไม่ต้องแม่นยำ

⚠️ ข้อควรระวัง

  • ข้อมูลที่ไม่ใช่ตัวเลข (เช่น 'abc') จะกลายเป็น 0 พร้อม Warning
  • ใช้ DECIMAL สำหรับเงิน/การเงิน (หลีกเลี่ยง floating point error)
  • กำหนด precision/scale ให้พอดี (ใหญ่เกินไป = waste space)

จัดการข้อมูลผิดปกติ

-- แปลงเฉพาะที่เป็นตัวเลขได้
SELECT CAST(Amount AS DECIMAL(10,2)) 
FROM VarcharToDouble 
WHERE Amount REGEXP '^[0-9]+(\.[0-9]+)?$';