我将在我的数据库中编辑一些假数据。但是如果我为每一行和每一列生成随机数,它就没有我想要的那么随机。结果可以在下图中看到。
这是我使用的代码:
WITH x AS
(
SELECT mintwee, mineen, nul, pluseen, plustwee
FROM Topic
)
SELECT mintwee = CAST(RAND()*100 AS INT),
mineen = CAST(RAND()*100 AS INT),
nul = CAST(RAND()*100 AS INT),
pluseen = CAST(RAND()*100 AS INT),
plustwee = CAST(RAND()*100 AS INT)
FROM x
Run Code Online (Sandbox Code Playgroud)
和这个:
WITH x AS
(
SELECT
mintwee = CAST(RAND()*100 AS INT),
mineen = CAST(RAND()*100 AS INT),
nul = CAST(RAND()*100 AS INT),
pluseen = CAST(RAND()*100 AS INT),
plustwee = CAST(RAND()*100 AS INT)
FROM Topic
)
SELECT mintwee, mineen, nul, pluseen, plustwee
FROM x ;
Run Code Online (Sandbox Code Playgroud)
但两者都有相同的结果。我知道,我必须使用一个UPDATE语句,但这仅用于结果良好的尝试。之后,我将使用该UPDATE语句。
我使用带有快速 2014 版本的 SQL 服务器。
由于表行和 RAND 函数之间没有相关性,因此该表达式在查询中只计算一次。
生成随机值的一种方法是使用 NEWID() 函数。下面的示例生成 0-99 范围之间的随机整数值。可以针对不同范围调整模值,您可以使用此基本技术为日期、字符等生成随机值。
WITH x AS
(
SELECT mintwee, mineen, nul, pluseen, plustwee
FROM Topic
)
SELECT mintwee = CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 3) AS int) % 100,
mineen = CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 3) AS int) % 100,
nul = CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 3) AS int) % 100,
pluseen = CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 3) AS int) % 100,
plustwee= CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 3) AS int) % 100
FROM x;
Run Code Online (Sandbox Code Playgroud)
编辑:
根据 Aaron 的评论,如果您只需要 32 位整数,则可以简化表达式。附加示例:
--postive int
SELECT ABS(CHECKSUM(NEWID()));
--postive and negative int
SELECT CHECKSUM(NEWID());
--postive bigint
SELECT CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 7) AS bigint);
--negative and postive bigint
SELECT CAST(SUBSTRING(CAST(NEWID() AS binary(16)),1, 8) AS bigint);
--dates between now and 1 year ago
SELECT DATEADD(day, -ABS(CHECKSUM(NEWID())) % 365, GETDATE());
--random uppercase character
SELECT CAST(CAST(65 + ABS(CHECKSUM(NEWID()) % 26) AS binary(1)) AS char(1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11889 次 |
| 最近记录: |