⑴ sql 隨機數
;with c
as
(select 1 as ID
union all
select ID+1 from c where ID<30)
select top 7 ID from c order by newID()
ID
-----------
2
6
9
3
30
11
8
(7 個資料列受到影響)
⑵ sql server 怎麼生成隨機數
rand() 定義: 返回從0到1之間的隨機浮點值。
舉例說明:
select rand() as 隨機數 結果如圖:
select cast( floor(rand()*N) as int ) --方法1
結果:20
select cast( ceiling(rand()*N) as int ) --方法2
結果:43
大致一看,這兩種方法沒什麼區別,區別就是他們的生成隨機數的范圍:
方法1的數字范圍:0至N-1之間,如cast( floor(rand()*100) as int)就會生成0至99之間任一整數
方法2的數字范圍:1至N之間,如cast(ceiling(rand() * 100) as int)就會生成1至100之間任一整數
比較 CEILING 和 FLOOR
CEILING 函數返回大於或等於所給數字表達式的最小整數。FLOOR 函數返回小於或等於所給數字表達式的最大整數。
例如,對於數字表達式 12.9273,CEILING 將返回 13,FLOOR 將返回 12。
⑶ sql server和oracle中如何從100萬條記錄中,均勻、隨機的抽取5萬條記錄
你如果想通過這個彌補你數據結構上的問題,是不行的。因為資料庫里記錄存儲順序對資料庫來言沒有實質意義。
你的要求無論在那種資料庫中都可以實現,前提是你需要增加一個序號欄位,用來存儲順序號,但是一旦數據被刪除你就要建一個觸發器去重新生成這個順序號!
⑷ 如何在SQL里生成隨機數
從 RAND 生成隨機數的常用方法是,用相對可變的某個值作為種子值,例如將 GETDATE 的幾個部分累加:
SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )
⑸ sql產生隨機數問題,帶幾率的
1. 如何生成8位隨機數,生成的數越隨機,重復的可能性當然越小
2. 控制不重復
3. 考慮性能
針對這個問題,我寫了如下的示例來解決,希望能為有這類需求的人提供指導
生成100萬條8位不重復數據的示例
USE tempdb
GO
-- 創建測試表
CREATE TABLE tb(id char(8))
-- 創建用於自動過濾重復值的唯一索引
CREATE UNIQUE INDEX IX_tb ON tb(id)
WITH IGNORE_DUP_KEY
GO
-- 測試數據插入的處理時間, 記錄開始處理的時間點
DECLARE @dt datetime
SET @dt = GETDATE()
-- 插入隨機數據
SET NOCOUNT ON
DECLARE @row int
SET @row = 1000000 -- 設置總記錄數
WHILE @row >0
BEGIN
-- 顯示提示信息, 表示還需要插入多行數據
RAISERROR('need %d rows', 10, 1, @row) WITH NOWAIT
-- 插入隨機的位編碼數據
SET ROWCOUNT @row
INSERT tb SELECT
id = RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8)
FROM syscolumns c1, syscolumns c2
SET @row = @row - @@ROWCOUNT
END
-- 顯示插入數據使用的時間
SELECT BeginDate = @dt, EndDate = GETDATE(),
Second = DATEDIFF(Second, @dt, GETDATE()),
GO
-- 顯示最終的結果記錄是否正確
SELECT COUNT(*) FROM tb
GO
-- 刪除測試
DROP TABLE tb
解決中用到的技巧:
1. 控制產生的數據不重復,直接使用唯一索引中的 IGNORE_DUP_KEY 選項,使插入數據中的重復值自動過濾,避免手工處理重復
2. 使用 CHECKSUM 配合 NEWID() 函數,使生成的數據盡量隨機,一般生成隨機數會考慮使用 RAND() 函數,但這個函數是產生偽隨機值,用下面的語句測試一下,會發現產生的數據全部是一樣的,這不適用於想批量生成多個隨機數,而NEWID() 函數生成的是GUID,基本上不會有重復的,再通過CHECKSUM將其轉化成數字,這樣產生重復的可能性會比較小
SELECT TOP 10
RAND()
FROM sysobjects
3. 在效率控制,使用循環+批量生成的方式,而不是傳統的逐個生成。在SQL Server中,每個插入語句都會有一個內部的事務處理,如果逐條插入,則事務的開銷太大,效率勢必非常低;不考慮一次性生成100萬數據,一則因為生成的數據可能有重復的,去掉重復就沒有100萬了,二則一次性生成100萬數據,消耗的內存和CPU資源也很高,一般的電腦可能承受不住
⑹ 使用SQL語句取隨機數的方法
SQL隨機查詢語句,[資料庫使用技巧]SQL語句生成隨機數,如何隨機顯示sql查詢語句查詢的數據記錄集中的20條,隨機取出若干條記錄的SQL語句,使用SQL語句取隨機數的方法
方法如下:
SQL
Server:
Select
TOP
N
*
From
TABLE
order
By
NewID()
Access:
dim
r
randomize
r
=
rnd
sql
=
"select
top
10
*
from
table
order
by
rnd("
&
r
&
"-id)"
rnd("
&
r
&
"-id)
其中的id是自動編號欄位,可以利用其他任何數值來完成,比如用姓名欄位(UserName)
select
top
10
*
from
table
order
by
rnd("
&
r
&
"-Len(UserName))
MySql:
Select
*
From
TABLE
order
By
Rand()
Limit
10
orACLE:
select
*from
(select
*from
t
order
by
dbms_random.value)
where
rownum<10
⑺ SQL產生隨機數
下文將為您介紹SQL中的隨機函數rand(),供您參考,如果您是才接觸SQL Server的新手,不妨一看,相信對您學習SQL中的函數會大有幫助。
在SQL Server中,有個隨機函數rand(),有不少新手可能不知道存在這個函數,現在我就把這個函數的一些隨機數生成技巧寫出來,這是面向菜鳥的,老鳥請不要拍磚呀,我的頭還不夠硬
不過還是希望老鳥們多多指教了,現在切入正題:
隨機函數:rand()
在查詢分析器中執行:select rand(),可以看到結果會是類似於這樣的隨機小數:0.36361513486289558,
像這樣的小數在實際應用中用得不多,一般要取隨機數都會取隨機整數。那就看下面的兩種隨機取整數的方法:
1、
A:
select floor(rand()*N) ---生成的數是這樣的:12.0
B:
select cast( floor(rand()*N) as int) ---生成的數是這樣的:12
2、
A:select ceiling(rand() * N) ---生成的數是這樣的:12.0
B:select cast(ceiling(rand() * N) as int) ---生成的數是這樣的:12
其中裡面的N是一個你指定的整數,如100,可以看出,兩種方法的A方法是帶有.0這個的小數的,而B方法就是真正的整數了。
大致一看,這兩種方法沒什麼區別,真的沒區別?其實是有一點的,那就是他們的生成隨機數的范圍:
方法1的數字范圍:0至N-1之間,如cast( floor(rand()*100) as int)就會生成0至99之間任一整數
方法2的數字范圍:1至N之間,如cast(ceiling(rand() * 100) as int)就會生成1至100之間任一整數
對於這個區別,看SQL的聯機幫助就知了:
------------------------------------------------------------------------------------
比較 CEILING 和 FLOOR
CEILING 函數返回大於或等於所給數字表達式的最小整數。FLOOR 函數返回小於或等於所給數字表達式的最大整數。例如,對於數字表達式 12.9273,CEILING 將返回 13,FLOOR 將返回 12。FLOOR 和 CEILING 返回值的數據類型都與輸入的數字表達式的數據類型相同。
----------------------------------------------------------------------------------
現在,各位就可以根據自己需要使用這兩種方法來取得隨機數了^_^
另外,還要提示一下各位菜鳥,關於隨機取得表中任意N條記錄的方法,很簡單,就用newid():
select top N * from table_name order by newid() ----N是一個你指定的整數,表是取得記錄的條數 。
⑻ 如何用SQL語句實現某個欄位數為隨機數
以某整數欄位為種子(沒有的話要生成一個),通過RAND函數生成一個0-1之間的隨機數。如0.7136106261841817,然後轉換成文本型,再取後7位即RIGHT(CONVERT(VARCHAR,RAND(序號)),7) 。
⑼ 如何用SQL為每一行均產生一個隨機數
select
dbms_random.random
from
al;
返回的是binary_integer
類型值,產生任意大小的隨機數(正或者負)binary_integer
,范圍為2的31次方到-2的31次方。
具體還有很多關於隨機數字或者字母的使用,都是關於dbms_random系統包的用法,
例如dbms_random.value
;
dbms_random.normal
;
dbms_random.string
;
可以上網查詢下。
⑽ SQL語句隨機產生隨機數
產生隨機數:right(rand(),4)
rand()返回一大串帶小數點的數字,用right()截取後面的四位是不是變成了整數