基於Martin Smith's答案here,我一直試圖使用一種非常相似的技術來創建以兩個字符(AZ)開頭的10000個隨機字符串,然後使用兩個數字(0-9 )然後是兩個字符(AZ)。任何人都知道如何提前 保羅如何在TSQL中生成隨機格式化的字符串
3
A
回答
1
輕微修改的original:
DECLARE @Numbers TABLE
(
n INT PRIMARY KEY
);
WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1), --2
E02(N) AS (SELECT 1 FROM E00 a, E00 b), --4
E04(N) AS (SELECT 1 FROM E02 a, E02 b), --16
E08(N) AS (SELECT 1 FROM E04 a, E04 b), --256
E16(N) AS (SELECT 1 FROM E08 a, E08 b) --65,536
INSERT INTO @Numbers
SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM E16
/*
1. Build a table variable of numbers
2. For each row in the table (up to row 1000)
3. Get the top 2 numbers from the table variable
4. For each number, get the absolute value of the checksum of a GUID
5. This value will always be a positive integer
6. Get the remainder of that integer when divided by 26
7. This will always be a number between 0 and 25
8. If the absolute value number is divisible by 2, add 65 to the number (uppercase)
9. Otherwise, add 97 to the number (lowercase)
10. Use that number as an ASCII value and get the character representation
11. Use FOR XML PATH to convert the two characters in the subquery to a string
12. Repeat the same logic for 2 numbers (use %9 to get two numbers between 0 and 9)
13. Repeat the same logic from previous steps to get two more alphabetic characters
*/
SELECT CAST((SELECT TOP 2 CHAR(CASE
WHEN Abs(Checksum(Newid()))%2 = 0 THEN 65
ELSE 97
END + Abs(Checksum(Newid()))%26)
FROM @Numbers n1
WHERE n1.n >= -n2.n
FOR XML PATH('')) AS CHAR(2)) +
CAST((SELECT TOP 2 Abs(Checksum(Newid()))%9
FROM @Numbers n1
WHERE n1.n >= -n2.n
FOR XML PATH('')) AS CHAR(2)) +
CAST((SELECT TOP 2 CHAR(CASE
WHEN Abs(Checksum(Newid()))%2 = 0 THEN 65
ELSE 97
END + Abs(Checksum(Newid()))%26)
FROM @Numbers n1
WHERE n1.n >= -n2.n /*So it gets re-evaluated for each row!*/
FOR XML PATH('')) AS CHAR(2))
FROM @Numbers n2
1
select CHAR(RAND()*24+65) + CHAR(RAND()*24+65) +
right('0'+CAST(CAST(RAND()*100 as int) as varchar(2)),2) +
CHAR(RAND()*24+65) + CHAR(RAND()*24+65)
您可能希望把種子值的RAND功能,根據您的需要做到這一點使用相同的技術或者是不可能的,謝謝。
我想真正得到這些10000 ...
select top 10000 CHAR(RAND()*24+65) + CHAR(RAND()*24+65) +
right('0'+CAST(CAST(RAND()*100 as int) as varchar(2)),2) +
CHAR(RAND()*24+65) + CHAR(RAND()*24+65)
from sys.all_objects a cross join sys.all_objects b
+0
這個返回10000行的同一序列 - 謝謝您的幫助 – Paul
相關問題
- 1. 生成隨機字符串
- 2. TSQL:生成Update語句隨機字符串
- 3. 如何在Python中同步隨機生成的字符串
- 4. 生成奇怪字符的隨機字符串生成
- 5. 由openssl生成的隨機字符串並非如此隨機。
- 6. 生成字符串的隨機序列
- 7. 生成隨機字符串,不SecureRandom的
- 8. 生成獨特的隨機字符串
- 9. 生成隨機字符串的zsh
- 10. 從C#中的字符串列表生成隨機字符串?
- 11. 如何在Rational Performance Tester中生成一個隨機字符串?
- 12. 如何在java中生成隨機字符串?
- 13. 隨機化字符串中的字符?
- 14. PHP隨機字符串生成器...並非如此隨機
- 15. 使用QuickCheck從字符串池中生成隨機字符串
- 16. 如何從Java中的字符串集合生成隨機字符串?
- 17. 隨機字符串生成php
- 18. 生成隨機X長度字符串
- 19. Python生成隨機128位字符串
- 20. Python新手生成隨機字符串
- 21. Perl - PHP:隨機字符串生成
- 22. PHP半隨機字符串生成器
- 23. Jython隨機字符串生成
- 24. 隨機字符串生成器(PHP)
- 25. 無法生成隨機字符串
- 26. 生成25個僞隨機字符串
- 27. 生成一個隨機字符串
- 28. 從字符串生成隨機序列
- 29. 生成隨機x位字符串
- 30. fgets在字符串中生成隨機字符
謝謝8kb - 這很好地訣竅 – Paul