我正在尝试使用种子在 Sql Server 中选择随机行。我知道该功能newid()
,但是我找不到通过此功能使用种子的方法。我想运行如下代码:
select user_id from users;
go
上面的代码不是以随机方式选择用户,我需要帮助将其更改为根据种子随机选择用户。因此,如果我使用相同的种子运行相同的选择,我将获得相同的用户。
谢谢,克林特
我正在尝试使用种子在 Sql Server 中选择随机行。我知道该功能newid()
,但是我找不到通过此功能使用种子的方法。我想运行如下代码:
select user_id from users;
go
上面的代码不是以随机方式选择用户,我需要帮助将其更改为根据种子随机选择用户。因此,如果我使用相同的种子运行相同的选择,我将获得相同的用户。
谢谢,克林特
这是来自MSDN,它将选择 0 到 99 和大约前 10% 之间的数字:
SELECT * FROM Table1
WHERE (ABS(CAST(
(BINARY_CHECKSUM(*) *
RAND()) as int)) % 100) < 10
因此,如果您想要 0 到 19,那么例如使用 20 而不是 100。
我没有那么优雅的解决方案,但值得一试:
SELECT DISTINCT user_id, user_name, RandVal FROM (
SELECT CAST(RIGHT(CAST(RAND(user_id)*100 as varchar(100)),3) as int) as RandVal, user_id, user_name
FROM users) T
WHERE RandVal BETWEEN 700 and 900
看我的小提琴演示
我user_id
用作种子。
还有这个:
SELECT TOP 5 user_id, MAX(user_name), MAX(RandVal) as RandVal FROM (
SELECT CAST(RIGHT(CAST(RAND(user_id)*100 as varchar(100)),2) as int) as RandVal, user_id, user_name
FROM users) T
GROUP BY user_id
ORDER BY RandVal
也请参阅我的演示。
试试这个来获得 10 个随机用户:
SELECT user_id From users WHERE rand()>0.5 limit 10;