首页 > 解决方案 > 更新 SQL 表中数据选择中的列并保存

问题描述

我有以下名为datatable.

date         source    reading    tday  yday
---------------------------------------------
2021-05-27   x1        x          x     x   
2021-05-27   x2        x          x     x  
2021-05-27   x3        x          x     x  
2021-05-28   x1        x          x     x   
2021-05-28   x2        x          x     x  
2021-05-28   x3        x          x     x  
2021-05-31   x1        x          x     x   
2021-05-31   x2        x          x     x  
2021-05-31   x3        x          x     x  

我想将日期从 更新2021-05-312021-06-01,我只有 1 个数据库,我担心会弄乱数据,我该怎么做?

它应该看起来像这样

date         source    reading    tday  yday
----------------------------------------------
2021-05-27   x1        x          x     x   
2021-05-27   x2        x          x     x  
2021-05-27   x3        x          x     x  
2021-05-28   x1        x          x     x   
2021-05-28   x2        x          x     x  
2021-05-28   x3        x          x     x  
2021-06-01   x1        x          x     x   
2021-06-01   x2        x          x     x  
2021-06-01   x3        x          x     x  

我想它会是这样的

UPDATE date 
FROM datatable 
WHERE date = '2021-05-31' TO '2021-06-01';

或者

UPDATE datatable 
SET date = '2021-06-01' 
WHERE date = '2201-05-31';

日期列是日期时间格式。

编辑。

如何先添加数据,然后删除旧数据?

就像,将 2021 年 5 月 31 日的数据复制为 2021 年 6 月 1 日,(除日期外,所有其他列都是 2021 年 5 月 31 日数据的列)

date         source    reading    tday  yday
---------------------------------------------
2021-05-27   x1        x          x     x   
2021-05-27   x2        x          x     x  
2021-05-27   x3        x          x     x  
2021-05-28   x1        x          x     x   
2021-05-28   x2        x          x     x  
2021-05-28   x3        x          x     x  
2021-05-31   x1        x          x     x   
2021-05-31   x2        x          x     x  
2021-05-31   x3        x          x     x  
2021-06-01   x1        x          x     x   
2021-06-01   x2        x          x     x  
2021-06-01   x3        x          x     x  

然后删除2021-05-31所在的行,所以我最终得到

为此,我猜查询将是:

DELETE FROM datatable 
WHERE date = '2021-05-31';
date         source    reading    tday  yday
--------------------------------------------
2021-05-27   x1        x          x     x   
2021-05-27   x2        x          x     x  
2021-05-27   x3        x          x     x  
2021-05-28   x1        x          x     x   
2021-05-28   x2        x          x     x  
2021-05-28   x3        x          x     x  
2021-06-01   x1        x          x     x   
2021-06-01   x2        x          x     x  
2021-06-01   x3        x          x     x  

标签: sqlpostgresqlsql-update

解决方案


为获得最安全的结果,请按照 Adminer 数据库解决方案对没有主键的表执行此操作:

更新数据表 SET date=“new-date” WHERE date=“old-date” AND source=“previous-source” AND reading=“previous-reading” AND 其余字段。

但是,为了让您的生活更轻松,我建议添加 id 列 (AUTO_INCREATMENT & PRIMARY_KEY),并使用以下方法更新数据:

更新您的更新查询...。WHERE id="target-id"</p>


推荐阅读