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