-1

すでにデータが入力されている多くの行を含むデータベーステーブルがあります。このデータは、generatedata.comのオンラインデータ生成フォームを使用して生成されました。

ほとんどの場合は問題ありませんが、問題は、生成された日付フィールドの多くが重複していることです。私の目的では、それらが一意であり、理想的には妥当な/指定された範囲内にある必要があります。

たとえば、date2010-01-01から今日までのランダムで一意の日付をすべての行の列に入力するとします。これをすばやく行うために使用できるMySQLクエリまたはクエリのセットはありますか?

技術的には、このようなものがランダムな部分でうまく機能します。

UPDATE table 
SET date = CONCAT( FLOOR(2010 + (RAND() * (2013-2010)) ),
        '-',
        FLOOR(1 + (RAND() * (12-1))),'-',FLOOR(1 + (RAND() * (28-1))))

考えられるすべての日付を考慮する必要はありません。それらは有効な日付でなければならないので、上記の行は範囲内のランダムな日付を示していますが、それらがすべて一意であることを確認するために何を追加できますか?

4

3 に答える 3

0

第 9 章の Head First SQL では、同様のクエリ ステートメントを使用する必要がありました。これが私がしたことです:

str_to_date( concat( floor( 1 + rand() * (12-1)), '-', floor(1 + rand() * (28 -1)), '-', (1999 + FLOOR(RAND()) * (2013-1999 +1)))), '%m-%d-%Y')

于 2014-05-04T23:04:08.453 に答える
0

mysqldump を使用して、テーブル全体を "|" であるテキスト ファイルにエクスポートします。分離。

以下のように見えますが、

table.dat

1|aa@aa.com|<<date_column>>
2|aa@aa.com|<<date_column>>
3|bb@b.com|<<date_column>>   

 1. Use AWK, SED, SHELL, PERL or RUBY (I love ruby) and replace the last
   column with a loop on the time given out by the chosen scripting
   language. Implement your own logic here. 

 2. Make sure your final dat file doesn't have any duplicate date.

final.dat をテーブルにロードしてください!

于 2013-03-15T22:28:49.093 に答える
0

テーブルの行ごとに一意の整数を持つ ID 列がありますか? その場合は、次のようにします。

  UPDATE `table` 
     SET `date` = CURRENT_DATE() - INTERVAL `id` DAY

これにより、今日から逆算して、各行に異なる日付が表示されます。それはあなたのニーズを満たすはずです。何らかの理由で、固定された日付から前にカウントする必要がある場合は、代わりにこれを試してください。

  UPDATE `table` 
     SET `date` = '2010-01-01' + INTERVAL `id` DAY

編集

ID番号が0または1で始まらない場合は、@ Randyが提案したように、これを試してください:

UPDATE `table` 
   SET `date` = '2010-01-01' +
         INTERVAL (`id` - (SELECT MIN(`id`) FROM `table`) ) DAY
于 2013-03-15T23:31:51.233 に答える