Quiero obtener el hash MD5 de un valor de cadena en SQL Server 2005. Hago esto con el siguiente comando:
SELECT HashBytes('MD5', 'HelloWorld')
Sin embargo, esto devuelve un valor VarBinary en lugar de un valor VarChar. Si intento convertirme 0x68E109F0F40CA72A15E05CC22786F8E6en un VarChar me sale en há ðô§*à\Â'†øælugar de 68E109F0F40CA72A15E05CC22786F8E6.
¿Hay alguna solución basada en SQL?
sql
sql-server
GateKiller
fuente
fuente

fuente
Use en
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)lugar demaster.dbo.fn_varbintohexstry luegosubstringingel resultado.De hecho
fn_varbintohexstrllamafn_varbintohexsubstringinternamente. El primer argumento defn_varbintohexsubstringle dice que agregue0xFcomo prefijo o no.fn_varbintohexstrllamadasfn_varbintohexsubstringcon1el primer argumento interno.Porque no necesitas
0xF, llamafn_varbintohexsubstringdirectamente.fuente
Al contrario de lo que dice David Knight , estas dos alternativas devuelven la misma respuesta en MS SQL 2008:
Parece que la primera es una mejor opción, a partir de la versión 2008.
fuente
(1 para convertir hexadecimal a cadena)
Convierta esto para reducir y eliminar 0x desde el inicio de la cadena subcadena:
exactamente lo mismo que obtenemos en C # después de convertir bytes a cadena
fuente
Con la experiencia personal de usar el siguiente código dentro de un Procedimiento almacenado que modifica una variable SP, puedo confirmar, aunque no está documentado, esta combinación funciona al 100% según mi ejemplo:
fuente
Cambiar el tipo de datos a varbinary parece funcionar mejor para mí.
fuente