【问题标题】:Update date and time sequence with interval 1 minute MYSQL以 1 分钟间隔更新日期和时间序列 MYSQL
【发布时间】:2018-08-21 03:37:49
【问题描述】:

例如我有这样的表:

id      Day             time
1       mon       2014-01-09 11:23:00
2       tue       2014-01-07 14:40:00
3       wed       2014-01-08 09:23:00 
4       thu       2014-01-09 12:23:00 

我想用序列 dan 间隔 1 分钟更改时间列 它会是这样的:

id      Day             time
1       mon       2014-01-16 08:01:00
2       tue       2014-01-16 08:02:00
3       wed       2014-01-16 08:03:00 
4       thu       2014-01-16 08:04:00 

我尝试像这样更新但不起作用

update schemanot set timenot = ('2014-01-16 08:01:00' + interval 1 minute) where id;

你能帮我看看语法是什么吗?

【问题讨论】:

  • MySQL 还是SQL Server
  • 其实是mysql
  • 请相应更新标签

标签: mysql sql syntax mysql-workbench


【解决方案1】:

您正在运行的更新将始终给出“2014-01-16 08:02:00”,因为无法动态更新间隔。使用下面的代码,它使用排名来动态更新间隔。

update schemanot updt
join(
select a.*, @curRank := @curRank + 1 AS der_rank
from schemanot a, (SELECT @curRank := 0) r
order by a.id
) rnk
on updt.id = rnk.id
set updt.timenot = ('2014-01-16 08:00:00' + interval der_rank minute);

SQL Fiddle Link

【讨论】:

  • 什么是“@curRank”?
  • 这是一个用于保存排名值的变量。由于 MySQL 没有任何嵌入式 rank 函数,因此这是一种解决方法。
  • 我收到此错误 ---> 错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换选项在 Preferences -> SQL Editor 中并重新连接。
  • 我的表用的是timestamp数据类型,你用的是datetime,会不会语法不一样?
【解决方案2】:

使用id怎么样?

update schemanot
    set timenot = ('2014-01-16 08:00:00' + interval id minute) ;

如果您担心差距,那么使用变量的简单方法是:

set @rn := 0

update schemanot
    set timenot = ('2014-01-16 08:00:00' + interval (@rn := @rn + 1) minute) 
order by id;

【讨论】: