我想制定一个程序来更新出生日期,该程序基于个人身份证号码,并且除了一件事情外,其他一切都很好。 PID仅获取一次,因此所有200条记录的结果都相同。我该如何更改?
例如:第一个值的PID是30052766293,因此birth_date = 1930-05-27,但是对于左PID,结果(日期)是相同的
CREATE PROCEDURE proc()
BEGIN
DECLARE s INT DEFAULT 0;
abc:LOOP
UPDATE people
SET birth_date = (SELECT str_to_date(CONCAT('19',substring(PID,1,2),
substring(PID,3,2),
substring(PID,5,2)
)
, '%Y %m %d') FROM workers LIMIT 1);
SET s = s+1;
IF s>=200
THEN LEAVE abc;
END IF ;
END LOOP;
END $$
编辑:人员和工人是单独的表,并且都具有相同的列PID
答案 0 :(得分:0)
由于PID
表中已经有people
值,因此只需更改UPDATE
即可使用该值。请注意,由于您要更改表中的所有值,因此甚至不需要存储过程,只需直接运行以下查询即可:
UPDATE people
SET birth_date = STR_TO_DATE(CONCAT('19',SUBSTRING(PID,1,2),
SUBSTRING(PID,3,2),
SUBSTRING(PID,5,2)
)
, '%Y %m %d');
请注意,您似乎可以将其进一步简化为:
UPDATE people
SET birth_date = STR_TO_DATE(CONCAT('19',SUBSTRING(PID,1,6))
, '%Y%m%d');