(简单)SQLite中的摘要功能

时间:2015-10-20 16:51:52

标签: sqlite

我有一个32个字符长的文本,我想从中生成64位哈希。不需要安全性,但这将是一个巨大的优势。

我的代码将在嵌入式设备上运行,我无法加载扩展程序。因此,解决方案只需要使用SQLite函数。

如果我使用C ++编程,我会对以下内容感到满意:

char text[32];
int64 hash = 5381;
for (int i = 0; i < 32; ++i) {
  hash = ((hash << 5) + hash) + c;
}

如何在SQLite中实现它?

1 个答案:

答案 0 :(得分:1)

SQLite是一个嵌入式数据库,即它可以在应用程序中使用,您可以在其中创建用户定义的函数。

如果您确实只需要在SQL中执行此操作,则可以使用递归common table expression

WITH RECURSIVE hash(id, h, rest) AS (
    SELECT id, 5381, text
    FROM MyTable
    UNION ALL
    SELECT id, (h * 33 + unicode(rest)) & 4294967295, substr(rest, 2)
    FROM hash
    WHERE rest != ''
)
SELECT id, h
FROM hash
WHERE rest = '';