【发布时间】:2018-01-12 05:34:32
【问题描述】:
我正在使用以下函数生成 5 个字母的随机密钥,但它是所有字母和数字的组合。
但根据要求,我需要生成一个不包含字符 'o' 和 'I' 且不包含数字 '0' 和 '1' 的随机唯一密钥。
DECLARE @automateKey VARCHAR(15)
DECLARE @Length INT = 6
DECLARE @Count INT = 2
SET @Length = @Length + 1
SET @Count = @Count + 1
SELECT @automateKey =
(SELECT CAST((ABS(Checksum(NewId())) % 10) AS VARCHAR(1)) +
CHAR(ascii('A')+(Abs(Checksum(NewId()))%25)) +
LEFT(newid(),@count) Random_Number)
SELECT (@automateKey)
我不确定如何从随机密钥生成中转义那些特定的字符和数字
有人可以帮忙解决这个问题吗?非常感谢。
【问题讨论】:
-
您可以检查最终字符串是否包含 0,1 或 O,L 中的任何一个,然后替换为其他一些字母
-
您提到随机键而不是随机值。生成的密钥是否需要是唯一的(即没有重复)?解决方案将取决于该要求。
-
是的,很抱歉忘记它应该是独一无二的......
-
澄清一下:您希望代码生成一个由单个数字、一个大写字母和三个附加数字组成的随机字符串。数字
0和1被禁止,字母I和O也是如此。相对于以前发布的字符串的某些未指定列表,结果字符串必须是唯一的。并且代码必须在insert语句中可用。这涵盖了一切吗? (从 0 到 7 的四个值,一个从 0 到 23 的值,映射到有效数字/字母的字符串。连接,检查if exists( ? ),根据需要重复。用户定义函数(UDF)?)
标签: sql sql-server tsql sql-server-2012 sql-server-2014