Le titre est assez explicite, ma question est de savoir si j'obtiens deux dates avec l'heure:
Est-il possible de choisir un datetime aléatoire entre ces deux datetime?
J'ai essayé avec la fonction random () mais je ne sais pas vraiment comment l'utiliser avec datetime
Merci
Matthiew
Vous pouvez presque tout faire avec les opérateurs date/heure :
select timestamp '2014-01-10 20:00:00' +
random() * (timestamp '2014-01-20 20:00:00' -
timestamp '2014-01-10 10:00:00')
J'ai adapté la réponse de @pozs, car je n'avais pas d'horodatage à utiliser.
90 days
est la fenêtre horaire souhaitée et le 30 days
est la distance jusqu'à laquelle pousser la fenêtre de temps. Cela est utile lorsque vous l'exécutez via un travail plutôt qu'à une heure définie.
select NOW() + (random() * (NOW()+'90 days' - NOW())) + '30 days';
Vous pouvez créer l'horodatage à partir d'un entier aléatoire (tampon Unix), par exemple:
select timestamp 'Epoch' + (
extract('Epoch' from timestamp '2014-10-01 10:00:00')
+ random() * (
extract('Epoch' from timestamp '2014-20-01 20:00:00')
- extract('Epoch' from timestamp '2014-10-01 10:00:00')
)) * interval '1 second'
Enveloppez-le dans une fonction SQL si vous l'utilisez souvent, car il n'est pas très lisible même après avoir tenté de le formater quelque peu.
Une autre façon de le faire serait d'utiliser generate_series()
de la date de début à la date de fin, ordonnée par random (), mais cela ralentirait les choses avec des intervalles de date plus longs, donc vous serez mieux avec l'approche ci-dessus.