-1

我有一个包含许多行的数据库表,这些行已经填充了数据。该数据是使用generateata.com的在线数据生成表格生成的。

大多数都可以,但问题是许多生成的日期字段都是重复的,出于我的目的,我需要它们是唯一的,最好在合理/指定的范围内。

例如,假设我想date用 2010-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

对于表中的每一行,您是否有一个 ID 列具有唯一整数?如果是这样,请执行以下操作:

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

这将为您在每一行提供不同的日期,从今天开始倒数。那应该能满足你的需要。如果出于某种原因您需要他们从固定日期开始计数,请尝试使用此方法。

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

编辑

如果您的身份证号码不是从零或一开始,请按照@Randy 的建议试试这个:

UPDATE `table` 
   SET `date` = '2010-01-01' +
         INTERVAL (`id` - (SELECT MIN(`id`) FROM `table`) ) DAY
于 2013-03-15T23:31:51.233 回答
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 并将整个表导出到一个文本文件中,该文件为“|” 分开。

如下图所示,

表.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 回答