问sql问题 datetime类型字段(时间字段)更新为随机数 表里面一个datetime类型的时间字段。格式当然为 2009-01-01 13:11:01表里大概有2万多条记录。我想用sql语句将这个时间字段随机替换掉。随机时间开始 2009-01-01 00:01:01随机时间结束 2009-05-10 20:59:59不知道用sql是否能实现啊。该怎么写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 mysql> SET @begin_date='2009-01-01 00:01:01';Query OK, 0 rows affected (0.00 sec)mysql> SET @end_date='2009-05-10 20:59:59';Query OK, 0 rows affected (0.00 sec)mysql> SET @second = TIMESTAMPDIFF(second,@begin_date,@end_date);Query OK, 0 rows affected (0.00 sec)mysql> SELECT @second;+----------+| @second |+----------+| 11221138 |+----------+1 row in set (0.00 sec)mysql> UPDATE tb SET -> `date` = TIMESTAMPADD(second,RAND()*@second,'2009-01-01 00:01:01');Query OK, 20000 rows affected (0.13 sec)Rows matched: 20000 Changed: 20000 Warnings: 0 多谢 小梁。不过有点不明白。为什么间隔是这个呢:RAND()*@second RAND() 产生的是一个0 <= v < 1.0的小数。所以需要用小梁的方法先计算差,然后乘上这个总秒数之后加上起始日期。http://dev.mysql.com/doc/refman/5.1/zh/functions.htmlRAND() RAND(N) 返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。 若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:SELECT FLOOR(7 + (RAND() * 6)); mysql免安装版打包问题 mysql 三个表的触发器问题! 关于PostgreSql远程数据传输问题 mysql中GPC和file_priv有什么作用? 合并表数据(唯一约束困扰) winform连接MySql查询条件中包含中文为什么查不到值?? 请教sql语句 数据库取值问题 急!~~~~~~~~~~~~ 关于mysql驱动问题 版主 来指导一下 MYSQL 的版本选择 mysql怎么把字符型2排到10前面? 关于postgres数据库
Query OK, 0 rows affected (0.00 sec)mysql> SET @end_date='2009-05-10 20:59:59';
Query OK, 0 rows affected (0.00 sec)mysql> SET @second = TIMESTAMPDIFF(second,@begin_date,@end_date);
Query OK, 0 rows affected (0.00 sec)mysql> SELECT @second;
+----------+
| @second |
+----------+
| 11221138 |
+----------+
1 row in set (0.00 sec)mysql> UPDATE tb SET
-> `date` = TIMESTAMPADD(second,RAND()*@second,'2009-01-01 00:01:01');
Query OK, 20000 rows affected (0.13 sec)
Rows matched: 20000 Changed: 20000 Warnings: 0
RAND() RAND(N)
返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。 若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:SELECT FLOOR(7 + (RAND() * 6));