为什么值是常数?

时间:2018-11-18 06:43:55

标签: mysql

我想制定一个程序来更新出生日期,该程序基于个人身份证号码,并且除了一件事情外,其他一切都很好。 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

1 个答案:

答案 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');