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

MySQL: แปลงชนิดข้อมูลเป็น BIGINT ด้วย CAST และ CONV

เมื่อต้องการแปลงค่า Hexadecimal (ฐาน 16) ให้เป็นตัวเลขขนาดใหญ่ (BigInt / UNSIGNED INTEGER) ใน MySQL ใช้ฟังก์ชัน CONV() แปลงฐาน แล้วตามด้วย CAST()

รูปแบบคำสั่ง

SELECT CAST(CONV(hex_column, 16, 10) AS UNSIGNED INTEGER) AS big_number
FROM table_name;
  • CONV(value, 16, 10) - แปลงจากฐาน 16 (Hex) เป็นฐาน 10 (Decimal)
  • CAST(... AS UNSIGNED INTEGER) - แปลงผลลัพธ์สตริงเป็นตัวเลข Unsigned (0 ถึง 18446744073709551615)

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

1. สร้างตารางเก็บค่า Hex

CREATE TABLE castTypeToBigIntDemo (
    Id INT NOT NULL AUTO_INCREMENT,
    Value VARCHAR(100),
    PRIMARY KEY (Id)
);

INSERT INTO castTypeToBigIntDemo (Value) VALUES
('AB5'),
('55244A5562C5566354'),
('4546575765ABD78'),
('5979787DEFAB'),
('86868686856ABD');

2. แปลง Hex → Decimal (BigInt)

SELECT CAST(CONV(Value, 16, 10) AS UNSIGNED INTEGER) AS BigNumber
FROM castTypeToBigIntDemo;

ผลลัพธ์:

+----------------------+
| BigNumber            |
+----------------------+
| 2741                 |
| 18446744073709551615 |
| 311985829366644088   |
| 98378247434155       |
| 37865559219858109    |
+----------------------+

หมายเหตุ: แถวที่ 2 ได้ค่าสูงสุด UNSIGNED BIGINT (2^64-1) พร้อม Warning เพราะค่า Hex เกินขอบเขต

การแปลงฐานอื่นๆ

คำสั่งความหมายผลลัพธ์
CAST(CONV('FF', 16, 10) AS UNSIGNED)Hex FF → Decimal255
CAST(CONV('1010', 2, 10) AS UNSIGNED)Binary 1010 → Decimal10
CAST(CONV('123', 10, 16) AS CHAR)Decimal 123 → Hex String'7B'
CAST(CONV('35', 10, 36) AS CHAR)Decimal 35 → Base36'Z'

ข้อจำกัดของ UNSIGNED INTEGER (BIGINT)

  • ช่วงค่า: 0 ถึง 18,446,744,073,709,551,615 (2^64 - 1)
  • ค่าที่ใหญ่กว่า จะถูก clamp ไว้ที่ค่าสูงสุด + Warning
  • หากต้องการค่ามากกว่า ต้องเก็บเป็น DECIMAL(65,0) หรือ VARCHAR

การใช้งานใน Stored Procedure / Function

DELIMITER //
CREATE FUNCTION HexToBigInt(hex_str VARCHAR(100))
RETURNS BIGINT UNSIGNED
DETERMINISTIC
BEGIN
    RETURN CAST(CONV(hex_str, 16, 10) AS UNSIGNED INTEGER);
END //
DELIMITER ;

-- ใช้งาน
SELECT HexToBigInt('ABCDEF');

สรุป

ใช้ CAST(CONV(hex_col, 16, 10) AS UNSIGNED INTEGER) เพื่อแปลง Hex String เป็น BIGINT UNSIGNED ใน MySQL รองรับค่าจนถึง 2^64-1 เกินกว่านั้นต้องใช้ DECIMAL หรือ VARCHAR