2008-12-08 16 views
10

Tengo un procedimiento almacenado que necesita convertir números hexadecimales a su equivalente decimal. He leído la documentación para la función UNHEX(), pero está devolviendo un valor binario. Lo que quiero hacer es algo como esto:Trabajando con números hexadecimales en MySQL

CREATE PROCEDURE foo(hex_val VARCHAR(10)) 
BEGIN 
    DECLARE dec_val INTEGER; 

    SET dec_val = UNHEX(hex_val); 

    -- Do something with the decimal value 
    select dec_val; 
END 

¿Qué me falta? ¿Cómo puedo convertir el valor de UNHEX() 'd en un entero sin signo?

Respuesta

22

Puede usar la función CONV() para convertir entre bases.

SET dec_val = CONV(hex_val, 16, 10); 
+0

Tenga en cuenta que esto devolverá el decimal como * cadena *. Si uno quiere obtener el decimal como un entero, use: elenco (conv (hex_val, 16, 10) como unsigned) – kien

7
conv(hex_val, 16, 10) 

convertirá un número de base 16 a la base 10. La función UNHEX hace algo completamente diferente, convierte pares de dígitos hexadecimales de caracteres.

+0

gracias por aclarar lo que hace "unhex". – eli

7

fundido (conv (hex_val, 16, 10) como entero sin signo) que debe ser resolver el problema ....

Cuestiones relacionadas