Saya ingin mendapatkan MD5 Hash dari nilai string di SQL Server 2005. Saya melakukan ini dengan perintah berikut:
SELECT HashBytes('MD5', 'HelloWorld')
Namun, ini mengembalikan VarBinary bukannya nilai VarChar. Jika saya mencoba untuk mengubahnya 0x68E109F0F40CA72A15E05CC22786F8E6
menjadi VarChar, saya há ðô§*à\Â'†øæ
malah mendapatkannya 68E109F0F40CA72A15E05CC22786F8E6
.
Apakah ada solusi berbasis SQL?
sql
sql-server
GateKiller
sumber
sumber
sumber
Gunakan
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)
alih-alihmaster.dbo.fn_varbintohexstr
dan kemudiansubstringing
hasilnya.Bahkan
fn_varbintohexstr
panggilanfn_varbintohexsubstring
internal. Argumen pertamafn_varbintohexsubstring
mengatakan untuk menambahkannya0xF
sebagai awalan atau tidak.fn_varbintohexstr
panggilanfn_varbintohexsubstring
dengan1
sebagai argumen internaly pertama.Karena Anda tidak perlu
0xF
, hubungifn_varbintohexsubstring
langsung.sumber
Bertentangan dengan apa yang dikatakan David Knight , kedua alternatif ini mengembalikan respons yang sama di MS SQL 2008:
Jadi sepertinya yang pertama adalah pilihan yang lebih baik, mulai dari versi 2008.
sumber
(1 untuk mengubah heksadesimal menjadi string)
ubah ini menjadi lebih rendah dan hapus 0x dari awal string dengan mensubstring:
persis sama dengan apa yang kita dapatkan di C # setelah mengkonversi byte ke string
sumber
Dengan pengalaman pribadi menggunakan kode berikut dalam Prosedur Tersimpan yang Hashing Variabel SP saya dapat mengkonfirmasi, meskipun tidak berdokumen, kombinasi ini berfungsi 100% sesuai contoh saya:
sumber
Mengubah datatype ke varbinary tampaknya bekerja paling baik untuk saya.
sumber