首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL用其他列的数据更新每一行

问MySQL用其他列的数据更新每一行
EN

Stack Overflow用户
提问于 2022-08-18 00:49:39
回答 2查看 23关注 0票数 0

我对MySQL查询很陌生。我必须用从该行中的另外两个字段构造的日期更新数据库中的所有行,下面的更新代码只适用于一行,但我需要遍历所有行并进行更新。

代码语言:javascript
复制
UPDATE jobs SET job_date = CONCAT(job_year,"-",job_month,"-01") WHERE id = 2;

我看过程序,但不知道如何让它开始工作。

代码语言:javascript
复制
DROP PROCEDURE IF EXISTS ROWPERROW;
DELIMITER ;;

CREATE PROCEDURE ROWPERROW()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SELECT COUNT(*) FROM jobs INTO n;
SET i=0;
WHILE i<n DO 
    UPDATE jobs SET job_date = CONCAT(job_year,"-",job_month,"-01");
  SET i = i + 1;
END WHILE;
End;
;;

演示

EN

回答 2

Stack Overflow用户

发布于 2022-08-18 00:51:48

这适用于一行:

代码语言:javascript
复制
UPDATE jobs SET job_date = CONCAT(job_year,"-",job_month,"-01") WHERE id = 2;

因为你让它更新

代码语言:javascript
复制
WHERE id = 2;

如果去掉该WHERE子句,它将更新所有行。

你不需要做手术。

票数 0
EN

Stack Overflow用户

发布于 2022-08-18 03:17:36

如莱斯特所说,删除where子句where id = 2

在我的经验中,这种情况(基于年份和月份列创建varchar日期列)并不经常发生,因为大多数情况下,首先得到确切的时间,然后再从该时间得到年份和月份。

如果只能从数据源获取年份和月份数据,则应在插入表job_date 时存储列。

如果您可以先得到job_date列,我认为有几件事您应该考虑

  1. 在插入行job_date时存储日期时间或时间戳类型(它们略有不同)
  2. 将索引放在job_date上。
  3. 通常情况下,t need to create year/month column if there is a job\_date column, if you want to extract the year / month value from mysql, you can use functions of mysql, like从xxx`中选择job_date、年份(Job_date)、月份(Job_state)。
  4. 如果必须创建列年份/月,则应根据job_date创建两列年份和月份,即整数类型(或类型年份/ tinyint),并在(年份、月份)上创建索引。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73396317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档