首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 隨機數函數 RAND() 完全指南:整數生成、範圍控制與隨機抽樣

     編輯:關於SqlServer

基礎函數

RAND() 回傳 0 到 1 之間的浮點數(如 0.36361513486289558)。實務常需整數,兩大經典轉換法:

方法一:FLOOR (範圍 0 ~ N-1)

-- 產生 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。

方法二:CEILING (範圍 1 ~ N)

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 時出現,機率極低)。

隨機抽取資料表 N 筆資料

SELECT TOP N * FROM table_name ORDER BY NEWID();

NEWID() 產生唯一識別碼,排序後等同隨機打亂,取前 N 筆。適用於抽樣、隨機推薦、A/B 測試分桶。

進階提示

  • RAND(seed) 給定種子可產生可重現序列,適合測試。
  • 大量資料隨機抽樣若需效能,可考慮 TABLESAMPLE (SQL Server 2005+) 或 BERNOULLI/SYSTEM 抽樣。
  • 避免在 WHERE 條件中直接使用 RAND() 導致每列重複計算,影響索引使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved