基于另一列更新MySQL列';s数据

基于另一列更新MySQL列';s数据,mysql,sql-update,Mysql,Sql Update,我有一张名为TICKET的表。票证中的列中有两个日期字段: TICKET ---------------------------------------- TICKDATE | ELSDATE | ... ---------------------+-------------+---- yyyy-mm-dd hh:mm:ss yyyy-mm-dd 这两个日期应该始终相同 我有一个日期范围(从7/1到当前),其中ELSDATE为空。我刚刚开始学习sql脚本,

我有一张名为
TICKET
的表。票证中的列中有两个日期字段:

TICKET
----------------------------------------
TICKDATE             | ELSDATE     | ...
---------------------+-------------+----
yyyy-mm-dd hh:mm:ss    yyyy-mm-dd
这两个日期应该始终相同

我有一个日期范围(从7/1到当前),其中ELSDATE为空。我刚刚开始学习sql脚本,我不知道如何更新一列以使另一列相等。我正在运行以一天一次更新的当前脚本是:

update TICKET ELSDATE="yyyy-mm-dd" where date(TICKDATE)="yyyy-mm-dd"
我想我可以做一些类似的事情:

update TICKET where ELSDATE="???" date(TICKDATE)<date("2015-09-29")

更新TICKET where ELSDATE=“??”date(TICKDATE)如果要将同一行中的每个ELSDATE值设置为TICKDATE值,其中TICKDATE在2015年9月29日之前,请使用以下命令:

UPDATE TICKET SET ELSDATE = TICKDATE where TICKDATE < "2015-09-29"
更新票证集ELSDATE=TICKDATE,其中TICKDATE<“2015-09-29”

如果要将同一行中的每个ELSDATE值设置为TICKDATE值,其中TICKDATE在2015年9月29日之前,请使用以下命令:

UPDATE TICKET SET ELSDATE = TICKDATE where TICKDATE < "2015-09-29"
更新票证集ELSDATE=TICKDATE,其中TICKDATE<“2015-09-29”

您可以在一个查询中完成所有更新,这样您就不必一天一次完成更新。查询会将每一行的日期更改为相等的日期

UPDATE TICKET SET ELSDATE = TICKDATE;
要仅更新ELSEDATE为null的行,可以使用

UPDATE TICKET SET ELSDATE = TICKDATE WHERE ELSDATE IS NULL;
要在两个日期之间更改行,请使用BEVERY子句

UPDATE TICKET SET ELSDATE = TICKDATE WHERE TICKDATE BETWEEN '2015-07-01' AND CURDATE();

您可以在一个查询中执行所有更新,这样就不必一天一次执行更新。查询会将每一行的日期更改为相等的日期

UPDATE TICKET SET ELSDATE = TICKDATE;
要仅更新ELSEDATE为null的行,可以使用

UPDATE TICKET SET ELSDATE = TICKDATE WHERE ELSDATE IS NULL;
要在两个日期之间更改行,请使用BEVERY子句

UPDATE TICKET SET ELSDATE = TICKDATE WHERE TICKDATE BETWEEN '2015-07-01' AND CURDATE();
是的:

更新票据
设置ELSDATE=TICKDATE
其中,TICKDATE
是的:

更新票据
设置ELSDATE=TICKDATE
其中,TICKDATE
如果它们应该始终相同,为什么不删除该列?它占用了空间,却没有给您带来任何好处。@Sumurai8 TICKDATE和ELSDATE是从远程站点的两个应用程序写入的。TICKDATE由监控应用程序在现场和远程读取。ELSDATE由我们的商业智能基础设施进行调查。这是非常愚蠢的,但这是公认的愚蠢,很难改变。如果它们应该一直是一样的,为什么你不删除那个专栏呢?它占用了空间,却没有给您带来任何好处。@Sumurai8 TICKDATE和ELSDATE是从远程站点的两个应用程序写入的。TICKDATE由监控应用程序在现场和远程读取。ELSDATE由我们的商业智能基础设施进行调查。这是非常愚蠢的,但它是公认的愚蠢,很难改变。最后一条语句是否包含
CURDATE()
?重要的是,从今天开始的数据中,ELSDATE仍然是
null
。@AdamSmith它会的。如果不想,请使用Where子句:
…Where TICKDATE>“2015-07-01”和TICKDATE。这将从查询中排除CURDATE()。@C4ud3x感谢您的澄清!在本例中,我可以更新比今天旧的所有行,因此我根本不必担心这一点。也就是说,很高兴知道我有什么选择!您的最终更新错误,中间的
CURDATE()
转换为
TIMESTAMP/DATETIME
,以便与
TICKDATE
进行比较(有效地附加
00:00:00
)。你最好使用
=
@Arth这两个条件,我错了。谢谢你指出。编辑我的帖子。最后一句话会包括
CURDATE()
?重要的是,从今天开始的数据中,ELSDATE仍然是
null
。@AdamSmith它会的。如果不想,请使用Where子句:
…Where TICKDATE>“2015-07-01”和TICKDATE。这将从查询中排除CURDATE()。@C4ud3x感谢您的澄清!在本例中,我可以更新比今天旧的所有行,因此我根本不必担心这一点。也就是说,很高兴知道我有什么选择!您的最终更新错误,中间的
CURDATE()
转换为
TIMESTAMP/DATETIME
,以便与
TICKDATE
进行比较(有效地附加
00:00:00
)。你最好使用
=
@Arth这两个条件,我错了。谢谢你指出。正在编辑我的帖子。这不能在
TICKDATE
上使用任何索引。。我建议
TICKDATE
@Arth你能解释一下吗?我不知道这是什么意思。如果列
TICKDATE
有索引,直接比较它的查询可以使用索引查找与比较匹配的行。就性能而言,这比访问每一行以查找匹配的行更可取。这不能在
TICKDATE
上使用任何索引。。我建议
TICKDATE
@Arth你能解释一下吗?我不知道这是什么意思。如果列
TICKDATE
有索引,直接比较它的查询可以使用索引查找与比较匹配的行。就性能而言,这比访问每一行以查找匹配的行更可取。