需要 SQL 使用 Snowflake SHA1/standard SHA1 函数的服务器 HASHBYTES SHA1 输出

Need SQL Server HASHBYTES SHA1 output using Snowflake SHA1/standard SHA1 function

我们正在将 SQL 服务器 commands/scripts 迁移到 Snowflake SQL,但遇到了这个特定查询。我们一直在 SQL 服务器中使用 HASHBYTES 函数将此字符串散列为 SHA1 算法。不幸的是,我们的 SQL 服务器命令的输出与雪花或任何其他转换器不匹配。

SQL 服务器代码:

select hashbytes('sha1',cast('214163915155286001' as varchar(18)))

SQL 服务器输出:

"GRHT33lIRvvHTg5M8pEzRZRm4Oc="

我们尝试在 snowflake 中编写上面的代码,如下所示:

雪花SQL:

Select sha1('214163915155286001')

雪花输出:

"1911d3df794846fbc74e0e4cf29133459466e0e7"

我们使用任何其他标准 SHA1 转换器获得相同的输出,但现在我们需要与从 SQL 服务器 HASHBYTES 获得的值完全相同。

您可以使用以下转换在 Snowflake 中获得相同的结果:

select to_char(to_binary(sha1('214163915155286001'), 'hex'), 'base64') as Result;

+------------------------------+
|            RESULT            |
+------------------------------+
| GRHT33lIRvvHTg5M8pEzRZRm4Oc= |
+------------------------------+

这是一种魔法:)

Gokhan 的答案是如何得到你说你想要的答案。但是了解您拥有的东西可能会有所帮助,

"1911d3df794846fbc74e0e4cf29133459466e0e7" 是 SHA1 散列,显示为散列的字符串。如果您正在对数据 SHA1 进行比较以检查内容是否“相同且未更改”(在 SHA1 确认这一点的能力范围内),您将使用它。

"GRHT33lIRvvHTg5M8pEzRZRm4Oc=" 是一个 BASE64 编码的字符串。正常的赠品是最后的 equals =。但这些并不总是存在,因为 base64 将 3 x 2^8 (256) 二进制数据块编码为可打印标记范围内的 4 x 2^6 (64) 流。