2013-02-14 6 views
3

Pouvez-vous s'il vous plaît aider:Randomiser Dates SQL

J'ai une colonne de date d'arrivée qui a besoin de 5000 lignes en y ajoutant des dates aléatoires de l'année 2010.

Par exemple: 01/01/2010, 25/8/2010, 03/05/2010, 31/12/2010 , etc

Je pense que ce serait une déclaration INSERT mais je ne suis pas sûr.

Merci

Wayne

USE Occupancy 
CREATE TABLE Book 
(BookNumber varchar(30), 
ArrivalDate int) 

DECLARE @BookNumber varchar(30) 
DECLARE @ArrivalDate int 

SET @BookNumber = 1 
SET @ArrivalDate = 0 

WHILE @BookNumber <= 5000 
WHILE @ArrivalDate <= 5000 

BEGIN 
INSERT INTO Book (BookNumber,ArrivalDate) 
SELECT 'B' + Right ('00000000' + CAST(@BookNumber AS varchar(30)),8), 
DATEADD(day, CAST(RAND() * 365 as int), '2010-1-1') 

SET @BookNumber = @BookNumber + 1 
SET @ArrivalDate = @ArrivalDate + 1 
END 
+0

[connexes] (http: // stackoverflow.com/questions/5519486/select-a-random-date-within-specific-range), [aussi en rapport] (http://stackoverflow.com/questions/794637/how-to-update -rows-with-a-random-date). – Dukeling

Répondre

5
DECLARE @counter int 
SET @counter = 0 
WHILE @counter < 5000 
BEGIN 
    INSERT INTO myTable (arrivalDate) 
    SELECT DATEADD(day, CAST(RAND() * 365 as int), '2010-1-1') 
    SET @counter = @counter + 1 
END 

Et si vous avez une table de numéros ou generator, vous pouvez éviter la boucle:

INSERT INTO myTable (arrivalDate) 
SELECT DATEADD(day, ABS(CHECKSUM(NEWID()) % 365), '2010-1-1') 
FROM (GenerateRowNumbers(5000, 1)) t 
+0

Excellent, j'adore. Une mise à jour cependant: * SET @counter = 0 * Je pense que c'est ce que vous vouliez dire. – Kprof

+0

Votre deuxième exemple générera la même valeur pour chaque ligne - 'RAND()' ne sera appelé qu'une seule fois. –

+0

@Kprof, typo - fixe – PinnyM