在SQL中生成短和唯一字符串值

时间:2017-05-05 17:24:07

标签: sql sql-server

我正在构建一个应用程序,它需要一个唯一的标识符作为UserID(例如A3D7sRt)。

在我的情况下,我已经指示不使用数字UserID,它应该是自动生成的。而且用户ID应该是6-8个字符长。这是因为它必须易于记忆。

这里使用GUID不是我的选择。因为GUID本质上是HEX,所以与相同长度的字符串相比,我将得到更少的唯一值。

那么在SQL中这样做的有效方法是什么?另外,我不想遇到频繁的唯一约束失败异常。

然后使用此值登录Android移动客户端。并且在登录过程中没有密码。

1 个答案:

答案 0 :(得分:1)

根据Martin SmithZohar Peled条评论,我找到了解决方案。

  1. 拿一个bigint(可能是你的主键)
  2. 将其编码为BASE36
  3. bigint不能为0.获取更高的数字(或从中开始) 输出长度大于6个字符
  4. 这是T-SQL

    DECLARE @Result VARCHAR(MAX) = ''
    DECLARE @Val BIGINT = 101722230 
    
    IF (@Val <= 1000000)
    BEGIN
        Select 'Very Small ID Try With Large BIGINT' 
        return;
    END
    
    WHILE (@Val > 0)
    BEGIN
        SELECT @Result = CHAR(@Val % 36 + CASE WHEN @Val % 36 < 10 THEN 48 ELSE 55 END) + @Result,
                @Val = FLOOR(@Val/36)
    END
    
    SElect @Result
    

    <强>输出

    1OK9DI 是上述代码的输出。 (认证)

    感谢所有通过评论这个问题帮助我的人。