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 0x68E109F0F40CA72A15E05CC22786F8E6
en 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_varbintohexstr
y luegosubstringing
el resultado.De hecho
fn_varbintohexstr
llamafn_varbintohexsubstring
internamente. El primer argumento defn_varbintohexsubstring
le dice que agregue0xF
como prefijo o no.fn_varbintohexstr
llamadasfn_varbintohexsubstring
con1
el primer argumento interno.Porque no necesitas
0xF
, llamafn_varbintohexsubstring
directamente.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