Có cách nào để tạo chuỗi băm MD5 kiểu varchar (32) mà không sử dụng fn_varbintohexstr
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Vì vậy, nó có thể được sử dụng bên trong chế độ xem với SCHEMABINDING
Có cách nào để tạo chuỗi băm MD5 kiểu varchar (32) mà không sử dụng fn_varbintohexstr
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Vì vậy, nó có thể được sử dụng bên trong chế độ xem với SCHEMABINDING
Câu trả lời:
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
Sử dụng HashBytes
SELECT HashBytes('MD5', 'email@dot.com')
Điều đó sẽ cung cấp cho bạn 0xF53BD08920E5D25809DF2563EF9C52B6
-
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)
Điều đó sẽ cung cấp cho bạn F53BD08920E5D25809DF2563EF9C52B6
Không có câu trả lời nào khác phù hợp với tôi. Lưu ý rằng SQL Server sẽ cung cấp các kết quả khác nhau nếu bạn chuyển vào một chuỗi được mã hóa cứng so với nguồn cấp dữ liệu từ một cột trong tập kết quả của bạn. Dưới đây là điều kỳ diệu đã giúp tôi tạo ra sự kết hợp hoàn hảo giữa SQL Server và MySql
select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
LOWER()
chỉ cần thiết nếu nó phân biệt chữ hoa chữ thường.
MD5
Hash giống hệt so với MD5()
chức năng của Postgresql
. Tôi đã tự hỏi tại sao các MD5
hash khác với Python
và Postgresql
. Cảm ơn vì công thức ..
thử cái này:
select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', 'email@dot.com' )),3,32)
declare @hash nvarchar(50)
--declare @hash varchar(50)
set @hash = '1111111-2;20190110143334;001' -- result a5cd84bfc56e245bbf81210f05b7f65f
declare @value varbinary(max);
set @value = convert(varbinary(max),@hash);
select
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)
Bạn đã không nói rõ ràng rằng bạn muốn chuỗi là hex; nếu bạn đang sử dụng mã hóa chuỗi cơ sở 64 tiết kiệm không gian hơn và bạn đang sử dụng SQL Server 2016 trở lên, đây là một giải pháp thay thế:
select SubString(h, 1, 32) from OpenJson(
(select HashBytes('MD5', 'email@dot.com') h for json path)
) with (h nvarchar(max));
Điều này tạo ra:
9TvQiSDl0lgJ3yVj75xStg==