import hashlib # Value to hash val = '1152985483' # HASHBYTES('MD5', '1152985483') # In SQL Server, varchar constants are hashed as-is. md5_hash = hashlib.md5(val.encode('ascii')).digest() print(f"MD5 binary: {md5_hash}") # sys.fn_sqlvarbasetostr converts varbinary to hex string with 0x prefix # 0x... hex_str = "0x" + md5_hash.hex().upper() print(f"Hex string (0x): {hex_str}") # convert(int, ...) # In SQL Server, convert(int, hex_string) treats the string as a representation of an integer. # However, MD5 is 16 bytes (128 bits). int is 4 bytes. # Typically, SQL Server's convert(int, string) for hex strings might only take the trailing bytes or fail if too large. # Let's see how SQL Server behaves. # Often, such expressions are used for "sharding" or simple numeric mapping. # Let's assume it takes the 4-byte integer value from the hex representation. # Most SQL conversions of long hex strings to INT focus on the right-most (least significant) 4 bytes. try: # Python int conversion from hex full_int = int(md5_hash.hex(), 16) # Get last 4 bytes for a standard INT last_4_bytes = md5_hash[-4:] result_int = int.from_bytes(last_4_bytes, byteorder='big', signed=True) print(f"Full hex: {md5_hash.hex()}") print(f"Last 4 bytes hex: {last_4_bytes.hex()}") print(f"Resulting Int: {result_int}") except Exception as e: print(f"Error: {e}") Use code with caution. Copied to clipboard hashbytes – SQLServerCentral Forums
: This is an internal, undocumented SQL Server function that converts the binary hash into its hexadecimal string representation, prefixed with 0x . import hashlib # Value to hash val =
: 778,655,686 (derived from the last 4 bytes: 2E6957C6 ) Important Considerations # However, MD5 is 16 bytes (128 bits)