You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在T-SQL与Azure Databricks SQL中将字符串哈希为整数?

在T-SQL和Azure Databricks SQL中生成一致的整数哈希值

要让两种SQL环境下生成的varchar转整数哈希结果一致,核心是统一哈希算法、字符编码以及结果转换逻辑,避免依赖各自的默认函数(如T-SQL的CHECKSUM、Databricks的hash())——这些函数底层实现完全不同,自然无法输出一致结果。

方案1:基于MD5算法生成一致BigInt哈希

MD5是两边都支持的标准哈希算法,通过对哈希结果做相同的截断和类型转换,可得到一致的整数哈希。

T-SQL 实现

SELECT 
  YourVarcharColumn,
  -- 生成MD5哈希后取前8字节,转换为BigInt
  CAST(LEFT(HASHBYTES('MD5', YourVarcharColumn), 8) AS BIGINT) AS HashInt
FROM YourTable;

Azure Databricks SQL 实现

SELECT
  your_varchar_column,
  -- 将MD5生成的十六进制字符串转二进制,取前8字节转BigInt
  CAST(UNHEX(SUBSTRING(MD5(your_varchar_column), 1, 16)) AS BIGINT) AS hash_int
FROM your_table;

方案2:基于SHA1算法生成一致BigInt哈希

如果需要更低的冲突率,可改用SHA1算法,逻辑和MD5一致:

T-SQL 实现

SELECT 
  YourVarcharColumn,
  CAST(LEFT(HASHBYTES('SHA1', YourVarcharColumn), 8) AS BIGINT) AS HashInt
FROM YourTable;

Azure Databricks SQL 实现

SELECT
  your_varchar_column,
  CAST(UNHEX(SUBSTRING(SHA1(your_varchar_column), 1, 16)) AS BIGINT) AS hash_int
FROM your_table;

关键注意事项

  • 字符编码一致性:确保两边输入字符串的编码匹配。比如T-SQL使用nvarchar(UTF-16)时,Databricks需先将字符串转为UTF-16再哈希;若用varchar(单字节编码),要确认两边代码页一致。
    示例:T-SQL中强制转UTF-8再哈希
    CAST(LEFT(HASHBYTES('MD5', CONVERT(VARBINARY(MAX), YourVarcharColumn, 65001)), 8) AS BIGINT) AS HashInt
    
  • 冲突风险:截断哈希结果会提升冲突概率,若业务对冲突敏感,建议使用完整哈希字符串而非整数,或改用SHA256等更长的哈希算法后截断更多字节。

内容的提问来源于stack exchange,提问作者bjnr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:13:32