SQLでは、範囲を与える列にランダムなdatetime値を挿入できますか?Mysqlは、与えられたdatetimeの範囲でランダムなdatetimeを挿入します
例えば、2012-04-30 14:53:27
から2010-04-30 14:53:27
の範囲与えられた私は、範囲の部分で混乱しています。私はちょうどここでは、この
INSERT INTO `sometable` VALUES (RND (DATETIME()))
SQLでは、範囲を与える列にランダムなdatetime値を挿入できますか?Mysqlは、与えられたdatetimeの範囲でランダムなdatetimeを挿入します
例えば、2012-04-30 14:53:27
から2010-04-30 14:53:27
の範囲与えられた私は、範囲の部分で混乱しています。私はちょうどここでは、この
INSERT INTO `sometable` VALUES (RND (DATETIME()))
を行っているだろうとして役立つはず例です。
INSERT INTO `sometable` VALUES(
FROM_UNIXTIME(
UNIX_TIMESTAMP('2010-04-30 14:53:27') + FLOOR(0 + (RAND() * 63072000))
)
)
それは、ベースとして日付2010-04-30 14:53:27
を使用してUnixのタイムスタンプにあることを変換し、乱数を追加0から+2年の基準日までの秒数を返し、それをDATETIMEに変換します。
これはかなり近いはずですが、より長い期間で閏年を調整し、他の調整を行うと捨てられます。
これはうまく動作するはずです:
SET @MIN = '2010-04-30 14:53:27';
SET @MAX = '2012-04-30 14:53:27';
SELECT TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, @MIN, @MAX)), @MIN);
TIMESTAMPDIFF
は、日付範囲で秒数を決定するために使用されます。これを0から1までの乱数で掛け、0からその範囲の秒数までの乱数を返します。この乱数を範囲の下限に追加すると、データ範囲の境界の間にランダムな日付が設定されます。
最も簡単な方法アウト:
INSERT INTO `sometable` VALUES (SELECT timestamp('2010-04-30 14:53:27') - INTERVAL FLOOR(RAND() * 366) DAY);
これも、うるう年のために完璧に作品:
select from_unixtime(
unix_timestamp('2000-1-1') + floor(
rand() * (
unix_timestamp('2010-12-31') - unix_timestamp('2000-1-1') + 1
)
)
)
考え方は単純です:ちょうどそれを変換し、その後、2つのタイムスタンプ間のランダムなタイムスタンプを取りますにfrom_unixtime
を使用してください。こうすることで、各オプションの確率が等しくなるようにすることができます。
ただ、試してみてください。
SELECT TIMESTAMP('2012-04-30 14:53:27')-INTERVAL RAND()*365*2 DAY INTO tbl_name;
をそれは古いスレッドですが、まだ...私の場合、私はこのような形式でランダムな日付を生成するために必要な:2017年1月1日。 誰かがそれを必要とするならば、私は@ drew010解決策を使用して、日付をDATE_FORMATでフォーマットしました。ここで
は私のコードです:
SELECT DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP('2015-01-01') + FLOOR(0 + (RAND() * 63072000))), '%Y-%m-%d');
私はなぜあなたはこれを行うにはしたくないだろう、 – karto
@FlorinStingaciu私のチャートをテストするためにそれを使用したいですか? – Pacerier
[MySQLのランダムな日付の挿入/更新](MySQLのランダムな日付の複製)の可能な複製(http://stackoverflow.com/questions/4546111/insert-update-random-date-in-mysql) –