SQL Server上的可重复随机排序

时间:2015-06-26 02:30:29

标签: sql-server tsql

我想知道是否有人知道如何在MS SQL Server上执行可重复的随机排序。

通过在随机函数上设置种子值,我在其他数据库平台上实现了相同的目标:

MySQL/MariaDB: ORDER BY RAND(?);
Oracle: EXEC DBMS_RANDOM.SEED(?); ORDER BY DBMS_RANDOM.VALUE;
Postgres: SELECT SETSEED(?); ORDER BY RANDOM();

但是,我无法在SQL-Server上找到相应的内容。 做了一些研究,我尝试了语法TABLESAMPLE(100 PERCENT)REPEATABLE(Y)。但TABLESAMPLE似乎没有以任何随机顺序返回给我行。

SQLFiddle:http://sqlfiddle.com/#!3/d50dd/30

1 个答案:

答案 0 :(得分:1)

这可能不是大表的最佳解决方案,但它适用于大多数较小的表集。

ORDER BY RIGHT(STR(RAND(id + seed), 18, 18), 1);

解释这是做什么的:

  • 我们根据传递的row_id +种子值生成随机浮点值。此浮动值的长度为18位。
  • 将随机浮点值转换为允许我们对值使用T-SQL本机字符串函数的字符串。
  • 使用T-SQL RIGHT()函数获取随机浮点值的最后一位数。使用ORDER by。

我不确定性能如何,但我预计这对于大型数据集来说非常平均而且不好。

SQLFiddle:http://sqlfiddle.com/#!3/d50dd/95