タイトルはかなり明確です、私の質問は私が時間で2つの日付を取得するかどうかです:
これら2つの日時の間のランダムな日時を選択することは可能ですか?
Random()関数を試してみましたが、datetimeでの使用方法がわかりません
ありがとう
マティエフ
日付/時刻演算子 を使用すると、ほとんどすべてのことができます。
select timestamp '2014-01-10 20:00:00' +
random() * (timestamp '2014-01-20 20:00:00' -
timestamp '2014-01-10 10:00:00')
@pozsの回答を採用しました。これは、タイムスタンプが出ていないためです。
90 days
は必要な時間枠であり、30 days
は、時間ウィンドウをプッシュする距離です。これは、設定された時間ではなくジョブを介して実行する場合に役立ちます。
select NOW() + (random() * (NOW()+'90 days' - NOW())) + '30 days';
ランダムな整数(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()
を使用することですが、これにより、日付間隔が大きくなると処理が非常に遅くなるため、上記のアプローチ。