현재 Postgres 및 Redshift에서 임의로 생성 된 문자열을 취하여 해시 한 다음 해시의 일부를 사용하여 0-99 사이의 임의의 숫자를 생성하는 함수가 있습니다. Azure SQL 데이터웨어 하우스에서이 기능을 복제하려고하는데 Postgres 및 Redshift에서와 마찬가지로 SQL DW에서 동일한 값을 얻습니다.Azure SQL 데이터웨어 하우스의 문자열로 이진 열 캐스팅
내가 실행중인 문제는 결과를 VARCHAR로 캐스팅하거나 문자열 함수를 사용하면 결과가 다른 문자열입니다. md5 함수의 결과를 동일한 VARCHAR
으로 가져오고 싶습니다. 당신이 볼 수 있듯이, 결과 VARCHAR는 MD5 함수의 출력과 크게 다른
SELECT
'abc123' as random_string,
HASHBYTES('md5', 'abc123') as md5,
CAST(HASHBYTES('md5', 'abc123') AS VARCHAR) as md5_varchar,
RIGHT(HASHBYTES('md5', 'abc123'), 5) as md5_right
;
이
random_string,md5,md5_varchar
abc123,0xE99A18C428CB38D5F260853678922E03,éšÄ(Ë8Õò`…6x’.,6x’.
산출 :
여기에 푸른 SQL DW에서 쿼리이며, 설명하기 . md5의 결과를 동일한 문자열로 변환하는 방법이 있습니까?Postgres와 Redshift에서 md5
함수의 결과는 VARCHAR이므로 변환 작업이 간단합니다.
-- Redshift
SELECT
'abc123' as random_string,
right(strtol(right(md5('abc123'), 3), 16), 2)::INT as tranche
;
-- Postgres
SELECT
'abc123' as random_string,
right(('x' || lpad(right(md5('abc123'), 3), 4, '0')) :: BIT(16) :: INT :: VARCHAR, 2) :: INT AS tranche
;
두 함수의 값이 87
을 반환 : 여기