0

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

SQL 服务器代码:

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

SQL 服务器输出:

"GRHT33lIRvvHTg5M8pEzRZRm4Oc="

我们尝试在雪花中编写上述代码,如下所示:

雪花 SQL:

Select sha1('214163915155286001')

雪花输出:

"1911d3df794846fbc74e0e4cf29133459466e0e7"

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

4

2 回答 2

2

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

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

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

这是一种魔法 :)

于 2022-01-11T15:40:35.923 回答
1

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

"1911d3df794846fbc74e0e4cf29133459466e0e7"是 SHA1 哈希,以哈希字符串的形式呈现。如果您正在比较数据 SHA1 以检查事物是否“相同且未更改”(在 SHA1 确认这一点的能力范围内),您将使用它。

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

于 2022-01-12T20:43:47.793 回答