2013-05-22 4 views
1

Мне нужно создать некоторые случайные данные, и все было плавно, пока я не узнал, что функции Rand возвращают 0 в результатах, есть способ изменения 100 * RAND(), чтобы не включать 0 и 3 * RAND() не включают в себя 0 либо, что мне нужно от 1 до 100 (в том числе 100) и еще один для рандомизации числа 1 и 2.Rand And Between two numbers

DECLARE @OrderNumber varchar (30) 
DECLARE @OrderDate int 
DECLARE @OrderLineNumber varchar(50) 
DECLARE @CustomerSkey int 
DECLARE @ProductSkey int 
DECLARE @OrderMethodSkey int 

SET @OrderNumber = 1 
SET @OrderDate = 0 
SET @OrderLineNumber = 1 
SET @CustomerSkey = 1 
SET @ProductSkey = 1 
SET @OrderMethodSkey = 1 

WHILE @OrderNumber <= 100 
WHILE @OrderDate <= 100 
WHILE @OrderLineNumber <= 100 
WHILE @CustomerSkey <= 100 
WHILE @ProductSkey <= 100 
WHILE @OrderMethodSkey <= 100 



BEGIN 
INSERT INTO Orders 
(OrderNumber 
, OrderDate 
, OrderLineNumber 
, CustomerSkey 
, ProductSkey 
, OrderMethodSkey) 

SELECT 
'ORD' + Right ('000000' + CAST (@OrderNumber AS varchar (30)), 6) 
,DATEADD (day, CAST (RAND() * 1500 as int), '2008-1-1') 
,(Right ('0' + CAST (@OrderLineNumber AS varchar (30)), 6)) 
,100*RAND() 
,100*RAND() 
,2*RAND() 

SET @OrderNumber = @OrderNumber + 1 
SET @OrderDate = @OrderDate + 1 
SET @OrderLineNumber = @OrderLineNumber + 1 
SET @CustomerSkey = @CustomerSkey + 1 
SET @ProductSkey = @ProductSkey + 1 
SET @OrderMethodSkey = @OrderMethodSkey + 1 

END 

ответ

5

Просто уменьшить множитель на 1, и добавить 1 после:

(99 * RAND()) + 1 

и

(2 * RAND()) + 1 
+0

Большое вам спасибо, я не могу поверить, что это было так просто. – wafw1971

+0

@ wafw1971 Это упрощение '((High-Low) * Rand) + Low', само собой разумеется, это единственный правильный способ сделать это. +1 – Jodrell

+0

Просто быстрое наблюдение, как мне рандомизировать время, мне нужно показать время в любое время на 24-часовом часе? – wafw1971