python эквивалентный формат T- SQL (хеширование) - PullRequest
0 голосов
/ 07 мая 2020

Как получить sh в python эквивалент следующего (изменение части sql невозможно, только mimi c поведение в python):

SELECT HASHBYTES('SHA2_256', FORMAT(1234, ''))
output: 0x4F37C061F1854F9682F543FECB5EE9D652C803235970202DE97C6E40C8361766

, который отличается от:

SELECT HASHBYTES('SHA2_256','1234')
SELECT HASHBYTES('SHA2_256',CAST(1234 as VARCHAR(100)))
output: 0x03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4

Как добиться в python первого вывода? В настоящее время:

from hashlib import sha256

sha256('1234'.encode()).hexdigest().upper()
output: 03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4

1 Ответ

2 голосов
/ 07 мая 2020

Результатом Format( 1234, '' ) будет NVarChar:

select sql_variant_property(FORMAT(1234, ''), 'basetype');

Вы можете cast значение, чтобы получить желаемый результат:

SELECT HASHBYTES('SHA2_256',CAST(FORMAT(1234, '') as VARCHAR(100)));
...