RAND() 回傳 0 到 1 之間的浮點數(如 0.36361513486289558)。實務常需整數,兩大經典轉換法:
-- 產生 0.0 格式
SELECT FLOOR(RAND() * 100); -- 例:12.0
-- 轉為純整數
SELECT CAST(FLOOR(RAND() * 100) AS INT); -- 例:12
範圍:0 到 N-1。CAST(FLOOR(RAND()*100) AS INT) 產生 0~99。
SELECT CEILING(RAND() * 100); -- 例:12.0
SELECT CAST(CEILING(RAND() * 100) AS INT); -- 例:12
範圍:1 到 N。CAST(CEILING(RAND()*100) AS INT) 產生 1~100。
FLOOR:回傳 小於或等於 運算式的最大整數。FLOOR(12.9273) = 12。CEILING:回傳 大於或等於 運算式的最小整數。CEILING(12.9273) = 13。因 RAND() 產生 [0,1),乘 N 後範圍 [0,N)。FLOOR 映射至 0~N-1;CEILING 映射至 1~N(0 只有 RAND()=0 時出現,機率極低)。
SELECT TOP N * FROM table_name ORDER BY NEWID();
NEWID() 產生唯一識別碼,排序後等同隨機打亂,取前 N 筆。適用於抽樣、隨機推薦、A/B 測試分桶。
RAND(seed) 給定種子可產生可重現序列,適合測試。TABLESAMPLE (SQL Server 2005+) 或 BERNOULLI/SYSTEM 抽樣。WHERE 條件中直接使用 RAND() 導致每列重複計算,影響索引使用。