Я хочу преобразовать часть строки ha sh, возвращенную функцией 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 Сервером?
SELECT to_number(substr(sha2(TO_VARCHAR(ABS(12.5)), 256), 61), 'xxxx')