sql - 如何为 400 万条记录生成 6 位唯一字母数字字符串,长度为 6 个字符,不区分大小写。通过更换
问题描述
如何为 400 万条记录生成 6 位唯一字母数字字符串,长度为 6 个字符,不区分大小写。通过替换 1、I、O 和 0。
我尝试使用以下查询,但问题是当我尝试替换上述值时,唯一 ID 有一些重复值。
** 选择 CAST(REPLACE(REPLACE(CHAR( ASCII('AA')+(ABS(CHECKSUM(NEWID()))%25)) , 'O', ''), 'I', '')
- REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(CONVERT(varchar(60), NEWID()),1, 10), '-',''), '.', ''), '0', '') , '1','') AS nvarchar (6)) , cte 中的employee_id **
最终输出应该是这样的:
解决方案
如果您希望 UID 看起来是随机的(例如,第一个可能是 G5K2M5,第二个可能是 23BN32 等),我认为您基本上有三个选择
- (在循环中)随机生成 UID,删除 a) 已经存在的 UID,并且 b) 在生成的列表中有重复项,然后插入唯一的 UID。重复,直到你没有剩下的。
- 生成一个包含所有可能 UID 的表(例如,除 1、I、L、0、o 之外的所有字母和数字 - 注意我已将 L 添加到列表中,因为小写 l 看起来像 I 或 1)。这意味着 6 个插槽中有 31 个可能的字符... 31^6 大约是 9 亿个可能性。对于要使用的 UID,从 UID 列表中随机选择所需的数字,根据需要分配它们,然后从列表中删除它们,这样您就不会得到双打。
- 使用每个数字唯一映射到 UID 的公式。然后只需获取行号或其他唯一 int 标识符,并从中计算 UID。请注意,该公式可能是一个数学公式,也可能只是一个表格(如上),其中 UID 最初是随机排序的,您只需从相关行号中获取 UID。
推荐阅读
- c# - 以编程方式获取 Microsoft Azure 的“始终开启”属性
- html - 在开发人员控制台中进行的更改在 angular mat-form-field 中的本地不起作用
- php - 无法使用 php html 在网格中显示图像
- javascript - 使用“esm”支持原生 ES6 模块的 Mocha 测试
- jsf - 将 HTTP 请求标头作为托管属性注入托管 bean
- angular - 不鼓励在 Angular 中为 httprequests 使用自定义管道?
- git - 为什么 git branch --merged 不显示分支,即使 git diff 显示没有区别?
- azure - 如果映像只有 OS 盘(C 盘),是否可以在 Azure 中创建 VM 时通过 ARM Teamplate 添加数据盘(例如 D 盘)?
- html - 将标题单元格 div 对齐到与其他 div 相同的高度
- javascript - Apollo 是否在查询/突变失败后将数据存储在缓存中,我如何访问它?