web-dev-qa-db-ja.com

PostgreSQL 2つの日時/タイムスタンプ間のランダムな日時/タイムスタンプを取得します

タイトルはかなり明確です、私の質問は私が時間で2つの日付を取得するかどうかです:

  • 01-10-2014 10:00:00
  • 2014年1月20日20:00:00

これら2つの日時の間のランダムな日時を選択することは可能ですか?

Random()関数を試してみましたが、datetimeでの使用方法がわかりません

ありがとう

マティエフ

31
Matthiew

日付/時刻演算子 を使用すると、ほとんどすべてのことができます。

select timestamp '2014-01-10 20:00:00' +
       random() * (timestamp '2014-01-20 20:00:00' -
                   timestamp '2014-01-10 10:00:00')
55
pozs

@pozsの回答を採用しました。これは、タイムスタンプが出ていないためです。

90 daysは必要な時間枠であり、30 daysは、時間ウィンドウをプッシュする距離です。これは、設定された時間ではなくジョブを介して実行する場合に役立ちます。

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

ランダムな整数(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関数で囲みます。

それを行う別の方法は、開始日から終了日まで、random()で順序付けされたgenerate_series()を使用することですが、これにより、日付間隔が大きくなると処理が非常に遅くなるため、上記のアプローチ。

3