【发布时间】:2020-11-22 07:39:12
【问题描述】:
我想将 HASHBYTES (SHA2_256) 函数返回的一段哈希字符串转换为 MS SQL Server 中的整数。
此查询返回'6BDA'
SELECT (SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4)) as tmp
但是当我尝试将其转换为 int 时,会导致错误:
--Conversion failed when converting the varchar value '6BDA' to data type int.
SELECT (CONVERT(int, SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4))) as tmp
如果我尝试将子字符串转换为 varbinary,然后再转换为 int,则结果与 27610 不同:
--Returns 910312513
SELECT (CONVERT(int, CONVERT(varbinary, SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4)))) as tmp
在 Snowflake 中,我可以使用 to_number 函数轻松执行转换:
以下查询将'6BDA' 转换为 27610。如何使用 SQL Server 实现相同的结果?
SELECT to_number(substr(sha2(TO_VARCHAR(ABS(12.5)), 256), 61), 'xxxx')
【问题讨论】:
-
我不确定你的实际用例,但如果你需要一个整数而不是字符串,你可以使用
CAST(CAST(SUBSTRING(HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))),31,2) AS varbinary(4)) AS int)
标签: sql sql-server hash cryptography snowflake-cloud-data-platform