2011-01-11 16 views
6

CAST() sembra funzionare solo per BINARY, CHAR, DATE; DATETIME, DECIMAL, TIME, SIGNED, UNSIGNED.Come posso trasmettere un tipo a un bigint in MySQL?

Ho bisogno di convertire una stringa esadecimale a un bigint, cioè, vorrei:

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

CONV() restituisce una stringa, quindi è per questo che sto cercando il convertirlo. Ho 2 usi per questo

  • Inserimento di dati, ad es. INSERT INTO a(foo) SELECT CONV(bar,16,10) FROM ... Qui foo è una colonna bigint, bar un varchar. Forse potrei farla franca con l'istruzione select (?)

  • Il ritorno dei dati in cui il client impara in modo dinamico il tipo di dati della colonna, SELECT CONV(bar,16,10) non è valido in quanto il client gestirlo come una stringa.

risposta

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

In modo che lo converte in un bigint/qualunque? Non devo preoccuparmi di traboccare un intero "normale"? – Anonym

+2

@Anonimo: in '5.1',' CAST ... AS UNSIGNED' restituisce sempre un 'BIGINT'. – Quassnoi

+0

È documentato ovunque? – will

2

quello che sembra essere il problema? Ho testato questa conversione sia su sistemi a 64 bit che a 32 bit. Funziona bene. Nota che invece di eseguire la conversione da esadecimale a bin, puoi semplicemente trattare il numero come esadecimale.

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

cast ('2' come BIGINT) -> _syntax error_ ... è il problema – will

Problemi correlati