MYSQL检查日期之间的差异,并相应地更新表

MYSQL检查日期之间的差异,并相应地更新表,mysql,Mysql,我想通过mysql准备的语句,根据列installed和实际时间DATEDIFF之间的时差,对表行应用更新 以下是我的更新和插入语句: CREATE TABLE `installs` ( `idinstalls` int(11) NOT NULL AUTO_INCREMENT, `key` varchar(45) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `DateTime` varchar(255) DEFAULT NULL, `chann

我想通过mysql准备的语句,根据列
installed
和实际时间
DATEDIFF
之间的时差,对表行应用更新

以下是我的更新和插入语句:

CREATE TABLE `installs` (
`idinstalls` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(45) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`DateTime` varchar(255) DEFAULT NULL,
`channelpref` varchar(255) DEFAULT NULL,
`contractorid` varchar(45) DEFAULT NULL,
`additiona` varchar(255) DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`installed` varchar(255) DEFAULT NULL,
`version` varchar(45) DEFAULT NULL,
`process` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idinstalls`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;

INSERT INTO `installs` VALUES (1,'1478997547716','Test instalation 1','2016-12-05 10:47:21',NULL,NULL,'Test',NULL,'2016-11-13 01:39:07',NULL,''),(2,'1478997633546','Tomo','2017-01-24 16:05:10',NULL,NULL,'Test',NULL,'2016-11-13 01:40:33',NULL,''),(3,'1479003293243','Test instalation 2','2017-01-24 04:26:49',NULL,NULL,'Test',NULL,'2016-11-13 03:14:53',NULL,''),(4,'1479118582052','Beta','2016-11-21 19:40:10',NULL,NULL,'Test','','2016-11-14 11:16:22',NULL,''),(5,'1479124220728','Beta 2','2017-01-22 15:54:41',NULL,NULL,'Test','','2016-11-14 12:50:20',NULL,''),(14,'1480154887591','','2016-11-26 12:41:01',NULL,NULL,NULL,NULL,'2016-11-26 11:08:07',NULL,''),(17,'1483456759196','','2017-01-13 11:42:06',NULL,NULL,NULL,NULL,'2017-01-03 16:19:20',NULL,''),(18,'1484474379679','','2017-01-24 12:12:41',NULL,NULL,NULL,NULL,'2017-01-15 10:59:41',NULL,'')
与此问题相关的列有:
名称
已安装
过程

查询应根据以下条件更新列流程:

如果列
name
有输入(它既不是空字段也不是空字段),则应为列
进程
分配值“1”。 如果列
name
没有输入,查询应检查两个日期之间的差异,第一个是该行
installed
列中的日期和时间,另一个是实际的当前日期和时间,如果日期时间差异大于30天,则应将该行的列
process
更新为值“0”


这是我的

如果我在问这个问题,我会用这种方式建立数据集,并相应地构造我的问题

CREATE TABLE `installs` (
  `idinstalls` int(11) NOT NULL AUTO_INCREMENT,
  `key` varchar(45) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,  
  `installed` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`idinstalls`)
);

INSERT INTO `installs` VALUES 
( 1,'16','Test instalation 1','2016-11-13 01:39:07'),
( 2,'46','Tomo'              ,'2016-11-13 01:40:33'),
( 3,'43','Test instalation 2','2016-11-13 03:14:53'),
( 4,'52','Beta'              ,'2016-11-14 11:16:22'),
( 5,'28','Beta 2'            ,'2016-11-14 12:50:20'),
(14,'91',''                  ,'2016-11-26 11:08:07'),
(17,'96',''                  ,'2017-01-03 16:19:20'),
(18,'79',''                  ,'2017-01-15 10:59:41');

您应该为DateTime和installed列使用数据类型时间戳。然后你可以做以下事情

update installs set process = '1' where name is not null and name != '';
update installs set process = '0' where (name is null or name = '') and datediff(now(), installed) > 30;

小提琴很棒,但除此之外,我觉得我们有点倒退了。似乎关键点在这里不相关。谢谢你,你的回答很有帮助,我将继续努力并修改它以满足我的需要+实际上,您可以保留表结构,并且查询语句仍然可以工作。