出于示例的目的,我有一个包含单列的表:
Col1 NVARCHAR(50)
它有一行,Col1的值为:b
我想创建一个使用该值创建MD5哈希值的select语句,但该值需要以下列格式附加到几个固定字符串中:
'a' + Col1 + 'c'
如此有效,我正在尝试为'abc'
创建一个MD5,这应该导致:
900150983CD24FB0D6963F7D28E17F72
要创建MD5哈希,我使用的是HashBytes
函数。但是,当我使用列值加入固定字符串时,它不会产生预期的输出。例如:
CONVERT(VARCHAR(32), HashBytes('MD5', 'a' + Col1 + 'c'), 2)
结果:
CE1473CF80C6B3FDA8E3DFC006ADC315
哪个错了。但是,以下所有结果都会产生正确的输出:
CONVERT(VARCHAR(32), HashBytes('MD5', 'abc'), 2)
CONVERT(VARCHAR(32), HashBytes('MD5', 'a' + 'b' + 'c')
显然这与使用字段值有关,但是我很遗憾它是什么(可能是某些编码或与nvarchar有什么关系?)。
如何确保生成正确的MD5值?
答案 0 :(得分:1)
该列为NVARCHAR
,但其他值均为VARCHAR
。
您可以将列强制为VARCHAR
:
CONVERT(VARCHAR(32), HashBytes('MD5', 'a' + CAST(Col1 AS VARCHAR(50)) + 'c'), 2)