2011-01-11 16 views
6

CAST() parece que solo funciona para BINARY, CHAR, DATE; DATETIME, DECIMAL, TIME, SIGNED, UNSIGNED.¿Cómo echo un tipo a bigint en MySQL?

necesito para convertir una cadena hexadecimal a un bigint, es decir, que me gustaría:

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

CONV() devuelve una cadena, así que por eso estoy tratando el convertido él. Tengo 2 utiliza para estos datos Inserción

  • , por ejemplo INSERT INTO a(foo) SELECT CONV(bar,16,10) FROM ... Aquí foo es una columna de letra grande, barra un varchar. Tal vez podría salirse con la instrucción Select siendo una cadena y dejar que MySQL se ocupe de ella (?)

  • Devolver datos donde el cliente aprenderá dinámicamente el tipo de datos de la columna, SELECT CONV(bar,16,10) no es bueno ya que el cliente manejarlo como una cadena.

Respuesta

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

¿Entonces eso lo convierte en un bigint/lo que sea? No tengo que preocuparme por desbordar un entero "normal". – Anonym

+2

@Anonym: en '5.1',' CAST ... AS UNSIGNED' siempre da como resultado 'BIGINT'. – Quassnoi

+0

¿Está documentado en alguna parte? – will

2

lo que parece ser el problema? He probado esta conversión tanto en el sistema de 64 bits como en el de 32 bits. Funciona bien. Tenga en cuenta que, en lugar de hacer la conversión hexadecimal a bin, simplemente puede tratar el número como hexadecimal.

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

emitir ('2' como BIGINT) -> _syntax error_ ... es el problema – will