PostgreSQL Получает случайное время-время/метку времени между двумя датами/метками времени

Название довольно явное, мой вопрос: если я получаю две даты с часом:

  • 01-10-2014 10:00:00
  • 01-20-2014 20:00:00

Можно ли выбрать случайное datetime между этими двумя datetime?

Я попытался с функцией random(), но я действительно не понимаю, как использовать его с datetime

Спасибо

Matthiew

Ответ 2

Вы можете создать временную метку из случайного целого (отметка unix), например:

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'

Оберните его в функцию SQL, если вы используете его часто, так как он не очень читается даже после попытки его отформатировать.

Другим способом сделать это будет использование generate_series() с даты начала до конца, упорядоченного по random(), но это сделает вещи очень медленными с большими интервалами с датами, поэтому вам будет лучше с выше подхода.

Ответ 3

Я адаптировал @pozs ответ, так как у меня не было временных меток, чтобы уйти.

90 days - это временное окно, которое вы хотите, а 30 days - это то, как далеко вы можете нажать окно времени. Это полезно при запуске через задание вместо заданного времени.

select NOW() + (random() * (NOW()+'90 days' - NOW())) + '30 days';