有没有办法在不使用fn_varbintohexstr的情况下生成类型为varchar(32)的MD5哈希字符串
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
因此可以在带有SCHEMABINDING的视图中使用
答案 0 :(得分:173)
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
答案 1 :(得分:59)
SELECT HashBytes('MD5', 'email@dot.com')
那会给你0xF53BD08920E5D25809DF2563EF9C52B6
-
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)
那会给你F53BD08920E5D25809DF2563EF9C52B6
答案 2 :(得分:20)
解决方案:
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
答案 3 :(得分:14)
其他答案都不适合我。请注意,如果传入硬编码字符串而不是从结果集中的列提供,则SQL Server将提供不同的结果。以下是让我在SQL Server和MySql之间完美匹配的神奇之处
select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
答案 4 :(得分:13)
对于 8000 字符的数据,请使用:
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
对于二进制数据(不限制为8000字节),请使用:
CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)
答案 5 :(得分:4)
试试这个:
select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', 'email@dot.com' )),3,32)
答案 6 :(得分:0)
声明@hash nvarchar(50) --declare @hash varchar(50)
set @hash ='1111111-2; 20190110143334; 001'-结果a5cd84bfc56e245bbf81210f05b7f65f 声明@value varbinary(max); 设置@value = convert(varbinary(max),@ hash);
选择
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','1111111-2; 20190110143334; 001')),3,32)为'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',@hash)),3,32)为'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@ hash))),3,32)为'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)
答案 7 :(得分:0)
SELECT CONVERT(
VARCHAR(32),
HASHBYTES(
'MD5',
CAST(prescrip.IsExpressExamRX AS VARCHAR(250))
+ CAST(prescrip.[Description] AS VARCHAR(250))
),
2
) MD5_Value;
为我工作。
答案 8 :(得分:0)
您没有明确表示您希望字符串为十六进制;如果您对节省空间的基本64位字符串编码持开放态度,并且使用的是SQL Server 2016或更高版本,则可以使用以下替代方法:
select SubString(h, 1, 32) from OpenJson(
(select HashBytes('MD5', 'email@dot.com') h for json path)
) with (h nvarchar(max));
这将产生:
9TvQiSDl0lgJ3yVj75xStg==