如何为现有表的Diff列自动填充日期差值并保存?
哦,我懂你的问题了——你用SELECT能算出日期差,但想把这个值永久存在表的Diff列里,之前用INSERT的方式不对,因为INSERT是往表里加新行,而不是更新现有行的字段对吧?
正确的解决方案
首先得明确:要修改已有行的字段值,得用UPDATE语句,而不是INSERT。下面分两种情况处理:
1. 如果你的表还没有Diff列
先执行这条语句添加列(假设差值是整数类型):
ALTER TABLE tbl_name ADD COLUMN Diff INT;
2. 更新Diff列的值
用UPDATE遍历每一行,把计算出的日期差赋值给Diff列。你可以用两种写法:
- 用更简洁的
DATEDIFF函数(MySQL支持):
UPDATE tbl_name SET Diff = DATEDIFF(FromDate, ToDate);
- 或者沿用你原来的
TO_DAYS写法:
UPDATE tbl_name SET Diff = TO_DAYS(FromDate) - TO_DAYS(ToDate);
效果示例
假设你表中原来有这样一行:
| FromDate | ToDate | Diff |
|---|---|---|
| 2018-05-22 | 2018-05-23 | NULL |
执行上面的UPDATE语句后,就会变成你想要的结果:
| FromDate | ToDate | Diff |
|---|---|---|
| 2018-05-22 | 2018-05-23 | 1 |
小提醒
执行全表UPDATE前,最好先备份数据,或者用WHERE子句测试单条数据的结果,比如:
UPDATE tbl_name SET Diff = DATEDIFF(FromDate, ToDate) WHERE id = 1;
确认计算正确后,再去掉WHERE子句更新全表。
内容的提问来源于stack exchange,提问作者ariefbogie
相关产品推荐
相关产品推荐

