我想散列datetime
使用列HashBytes
alter table dbo.Events
add HashKey AS hashbytes('MD5', cast(convert(varchar(200), format(datestamp,'yyyy-MM-dd HH:mm:ss.ffffff')) as varbinary)) persisted
但因为它是不确定的,我得到这个错误:
计算列不能持久,因为该列具有不确定性。
我设法得到它不指定以下格式进行
alter table dbo.PolicyEventsFromQueue
add HashKey AS hashbytes('MD5', cast( datestamp as varbinary)) persisted
但在SQL Server中,当我看到的格式和无格式我收到了相同的字段值不同的结果的结果:
Select
convert(varchar(200), hashbytes('MD5', cast(convert(varchar(200), format(datestamp, 'yyyy-MM-dd HH:mm:ss.ffffff')) as varbinary)), 1)
From
Events
Where
DateStamp ='2016-06-30 12:19:35.257961'
结果:
0xBE06A33FF10644A6D3B38EA134DDB97A
第二个查询:
select
hashbytes('MD5', cast('2016-06-30 12:19:35.257961' as varbinary))
结果:
0xBE06A33FF10644A6D3B38EA134DDB97A
第三个查询:
Select
convert(varchar(200), hashbytes('MD5', cast(DateStamp as varbinary)), 1)
From
Events
Where
DateStamp = '2016-06-30 12:19:35.257961'
结果:
0x3CB5C26B23EB4422515764686DFCAB82
基于上述研究我的理解是将SQL Server转换邮戳为另一种格式,然后散列。
但是,当我得到的C#等值同一日期使用以下功能(“2016年6月30日12:19 35.257961”),它不与散列值(匹配0x3CB5C26B23EB4422515764686DFCAB82
)。
public static byte[] GetMD5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.Unicode.GetBytes(input);
bs = x.ComputeHash(bs);
return bs;
}
任何人能熟知精确匹配日期时间格式,因为它采取的SQL Server和C#,使其与工作HashBytes
。
注:我需要的所有更新,包括miiliseconds。 这个问题是后续到下面的问题。 它可以帮助你了解问题的根源。
需要C#等同于下面的SQL HASHBYTES功能