在SQL中是否可以生成随机的字母数字字符串?
当前字符串是“ Mxxxx”和“ Pxxxx”,其中xxxx只是一个序列号。
我需要一种格式,在位置1、2和4处使用字母数字字符,在位置3和5处使用特殊字符。所有这些都是随机且唯一的。
字母数字字符为A – Z,1 –9。特殊字符为*,+,=,#,/,%,&、!和?。
是否可以在SQL Server中使用这种格式生成400个列表?
谢谢
答案 0 :(得分:1)
请参阅我的博客文章,其中介绍了使用纯TSQL生成随机字符串的方法: “ SQL: generate random character string”。第二种方法没有任何字符串长度限制。
答案 1 :(得分:0)
您可以在以下几行中使用类似的内容。
DECLARE @AlLChars varchar(100) = 'ABCDEFGHIJKL'
DECLARE @Numerics varchar(100) = '12345678910'
DECLARE @SpecialChars varchar(10) = '*+=#/%&!?'
DECLARE @I INT = 1
WHILE @I <= 400
BEGIN
INSERT INTO tblStrings
SELECT
RIGHT( LEFT(@AlLChars,ABS(BINARY_CHECKSUM(NEWID())%26) + 1 ),1)
+RIGHT( LEFT(@Numeric,ABS(BINARY_CHECKSUM(NEWID())%10) + 1 ),1)
+RIGHT( LEFT(@SpecialChars,ABS(BINARY_CHECKSUM(NEWID())%9) + 1 ),1)
+RIGHT( LEFT(@AlLChars,ABS(BINARY_CHECKSUM(NEWID())%26) + 1 ),1)
+RIGHT( LEFT(@SpecialChars,ABS(BINARY_CHECKSUM(NEWID())%9) + 1 ),1)
SET @I = @I + 1
END;
答案 2 :(得分:0)
您可以执行以下操作:
;WITH ALPHA AS (
SELECT DISTINCT CHAR(object_id) AS C FROM sys.columns SC
WHERE
object_id BETWEEN ASCII('A') AND ASCII('Z')
OR object_id BETWEEN ASCII('0') AND ASCII('9')
), SPC AS(
SELECT DISTINCT CHAR(object_id) AS S FROM sys.columns SC
WHERE
object_id IN (ASCII('*'), ASCII('+'), ASCII('='), ASCII('#'), ASCII('/'), ASCII('%'), ASCII('&'), ASCII('!'))
)
SELECT TOP 10 A1.C + A2.C + A3.C + S1.S + S2.S + S3.S
FROM
ALPHA A1, ALPHA A2, ALPHA A3, SPC S1, SPC S2, SPC S3
ORDER BY NEWID()
在妊娠期尝试:stackoverflow-54809150-auto-string-generator
根据需要调整符号的数量和位置。
当心:
这是相当消耗资源的! 如果需要多次运行,请准备具有计算值的表,然后从中进行选择。