如何在ms sql中将十六进制编码的字符串转换为整数?

cig3rfwq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(701)

我想将hashbytes(sha2_256)函数返回的一段哈希字符串转换为mssqlserver中的整数。
此查询返回 '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')

v2g6jxz6

v2g6jxz61#

试试这个

SELECT CAST( CONVERT(VARBINARY,'0x'+RIGHT('00000000'+REPLACE(tmp,'x',''),8),1) AS INT)
from table1

我用以下ddl测试了它:

create table table1(tmp varchar(64));

insert into table1
SELECT SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4)

看看这把小提琴是怎么用的。

相关问题