Ответ 1
CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)
Есть ли способ генерации строки хеша MD5 типа varchar (32) без использования fn_varbintohexstr
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', '[email protected]')), 3, 32)
Таким образом, он может использоваться внутри представления с SCHEMABINDING
CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)
Используйте HashBytes
SELECT HashBytes('MD5', '[email protected]')
Это даст вам 0xF53BD08920E5D25809DF2563EF9C52B6
-
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', '[email protected]'),2)
Это даст вам F53BD08920E5D25809DF2563EF9C52B6
Решение:
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
Ни один из других ответов не работал у меня. Обратите внимание, что SQL Server даст разные результаты, если вы передадите строку с жесткой кодировкой и подаете ее из столбца в вашем результирующем наборе. Ниже приведена магия, которая работала для меня, чтобы дать идеальное соответствие между SQL Server и MySql
select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
Для данных до 8000 символов используйте:
CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)
Для двоичных данных (без ограничения 8000 байт) используйте:
CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)
попробуй это:
select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '[email protected]' )),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)