首页 > 解决方案 > 如何为 400 万条记录生成 6 位唯一字母数字字符串,长度为 6 个字符,不区分大小写。通过更换

问题描述

如何为 400 万条记录生成 6 位唯一字母数字字符串,长度为 6 个字符,不区分大小写。通过替换 1、I、O 和 0。

我尝试使用以下查询,但问题是当我尝试替换上述值时,唯一 ID 有一些重复值。

** 选择 CAST(REPLACE(REPLACE(CHAR( ASCII('AA')+(ABS(CHECKSUM(NEWID()))%25)) , 'O', ''), 'I', '')

最终输出应该是这样的:

UID em_id AB1267 123 A34BF7 456 …………………………………………………………………………

标签: sqlsql-server

解决方案


如果您希望 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。

推荐阅读