2011-01-11 28 views
6

CAST() dường như chỉ hoạt động với BINARY, CHAR, DATE; DATETIME, DECIMAL, TIME, SIGNED, UNSIGNED.Làm cách nào để truyền một loại cho một bigint trong MySQL?

tôi cần phải chuyển đổi một chuỗi hex để một bigint, có nghĩa là, tôi muốn:

SELECT CAST(CONV("55244A5562C5566354',16,10) AS BIGINT) 

CONV() trả về một chuỗi, vì vậy đó là lý do tại sao tôi đang cố gắng sự chuyển đổi nó. Tôi có 2 cách sử dụng cho số điện thoại

  • Chèn dữ liệu này, ví dụ: INSERT INTO a(foo) SELECT CONV(bar,16,10) FROM ... Ở đây foo là một cột bigint, thanh một varchar. Có lẽ tôi có thể thoát khỏi câu lệnh chọn là một chuỗi và để cho MySQL xử lý nó (?)

  • Trả về dữ liệu mà khách hàng sẽ tự động tìm hiểu kiểu dữ liệu của cột, SELECT CONV(bar,16,10) không tốt bằng cách khách hàng sẽ xử lý nó như một chuỗi.

Trả lời

17
SELECT CAST(CONV('55244A5562C5566354',16,10) AS UNSIGNED INTEGER); 
+4

Vì vậy, chuyển đổi nó thành bigint/sao? Tôi không phải lo lắng về việc tràn một số nguyên "bình thường"? – Anonym

+2

@Anonym: trong '5.1',' CAST… AS UNSIGNED' luôn dẫn đến 'BIGINT'. – Quassnoi

+0

Tài liệu đó có ở bất kỳ đâu không? – will

2

gì có vẻ là vấn đề? Tôi đã thử nghiệm chuyển đổi này cả trên hệ thống 64-bit và 32-bit. Hoạt động tốt. Lưu ý rằng thay vì thực hiện chuyển đổi hex sang bin, bạn chỉ có thể coi số đó là hệ thập lục phân.

mysql> SELECT CAST(X'55244A5562C5566354' AS UNSIGNED); 
+-----------------------------------------+ 
| CAST(X'55244A5562C5566354' AS UNSIGNED) | 
+-----------------------------------------+ 
|      2614996416347923284 | 
+-----------------------------------------+ 
1 row in set (0.00 sec) 
+1

truyền ('2' làm BIGINT) -> _syntax error_ ... là sự cố – will

Các vấn đề liên quan