2013-05-27 4 views
0

무작위 int가 하루에 한 번만 변경되는 select 문에서 반환 된 각 행에 대해 "임의"정수를 생성하고 싶습니다 (오전 4시 전후) .SQL 날짜 및 int를 기반으로 Randomize 행을 매일 결과 순서 만 변경합니다.

declare @Date datetime 

set @Date = dateadd(dd, 8, GETDATE()) 

declare @DateNumber int 

set @DateNumber = LEFT(CONVERT(VARCHAR(8), @Date, 112),10) 
+ cast(CASE WHEN DATEPART(hh, @Date) > 4 THEN 1 ELSE 0 END as varchar(1)) 

declare @Customers table (Id int, Customer varchar(150), OrderNo int) 

insert into @Customers (Id, Customer) values (1, 'Cust A'), (2, 'Cust B'), 

(3 '커스트 C'), (4 '커스트 D', 5 ', 커스트 E'), (6 '커스트 F') (7 '커스트 G') (8 '커스트 H'), (9, "커스트 I ')

-- my 1st attempt which doesnt work 

update @Customers set OrderNo = rand(@DateNumber)/rand(Id) * 100 

select * from 
@Customers order by OrderNo 

I는 상기 DD 값을 변경할 때까지 일정하게 유지되어야하는 결과의 순서 상단에 @Date 문을 설정하십시오.

아이디어가 있으십니까? 이것이 가능한가? 당신이 RAND(Seed)에 씨앗을 제공 할 때 (A SQL 작업을 통해 매일이 계산의 외부) HABO의 권고가와


업데이트 솔루션은

declare @Date datetime = dateadd(hh, 36, GETDATE()) 

declare @DateNumber int = LEFT(CONVERT(VARCHAR(8), @Date, 112),10) + 
cast(CASE WHEN DATEPART(hh, @Date) > 4 THEN 1 ELSE 0 END as varchar(1)) 

declare @Customers table (Id int, Customer varchar(150), OrderNo int) 

insert into @Customers (Id, Customer) values (1, 'Cust A'), (2, 'Cust B'), 
(3, 'Cust C'), (4, 'Cust D'), (5, 'Cust E'), (6, 'Cust F'), 
(7, 'Cust G'), (8, 'Cust H'), (9, 'Cust I') 

declare @ThrowAway as Float = Rand(@DateNumber) 

declare @ID int 

set @ID = (select min(ID) from @Customers) 

while @ID is not null 

begin 

    update @Customers set OrderNo = Floor(Rand() * 100) + 1 where ID = @ID 


    set @ID = (select min(ID) from @Customers where ID > @ID) 

end 


select * from @Customers order by OrderNo 

답변

1

동일한 결과를 반환합니다. UPDATE 쿼리 이전에 시드 값을 사용하면 시퀀스가 ​​초기화됩니다. 그 후 인수없이 RAND()을 사용하십시오. 다음과 같이 입력하십시오 :

declare @ThrowAway as Float = Rand(@DateNumber) 
update @Customers 
    set OrderNo = Floor(Rand() * 100) + 1 

임의 값에 중복 값이 ​​포함됩니다.

+0

감사합니다. 그건 내가 원하는대로 루프를 돌릴 때마다 OrderNo를 설정하는 것입니다 ... 아쉽게도 내 완전한 tSQL을 게시 할 수 있습니다. – user1846472

관련 문제