yyyy - sql server convert string to datetime




Convertir HashBytes en VarChar (5)

Je veux obtenir le hachage MD5 d'une valeur de chaîne dans SQL Server 2005. Je le fais avec la commande suivante:

SELECT HashBytes('MD5', 'HelloWorld')

Cependant, cela renvoie un VarBinary au lieu d'une valeur VarChar. Si je tente de convertir 0x68E109F0F40CA72A15E05CC22786F8E6 en VarChar, j'obtiens há ðô§*à\Â'†øæ au lieu de 68E109F0F40CA72A15E05CC22786F8E6 .

Y a-t-il une solution basée sur SQL?

Yes


Avec l'expérience personnelle de l'utilisation du code suivant dans une procédure stockée qui Hashed une variable SP, je peux confirmer, bien que non documenté, cette combinaison fonctionne à 100% selon mon exemple:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)

Changer le type de données à varbinary semble fonctionner le mieux pour moi.


J'ai trouvé la solution d'autre où:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)

Utilisez master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0) au lieu de master.dbo.fn_varbintohexstr puis substringing - substringing du résultat.

En fait, fn_varbintohexstr appelle fn_varbintohexsubstring interne. Le premier argument de fn_varbintohexsubstring dit d'ajouter 0xF comme préfixe ou non. fn_varbintohexstr appelle fn_varbintohexsubstring avec 1 comme premier argument internaly.

Parce que vous n'avez pas besoin de 0xF , appelez fn_varbintohexsubstring directement.


convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 pour convertir hexadécimal en chaîne)

convertissez ceci en plus bas et supprimez 0x du début de la chaîne par sous-chaîne:

substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)

exactement le même que ce que nous obtenons en C # après la conversion des octets en chaîne





sql-server