为什么值是常量?

jogvjijk  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(332)

我想做一个程序,更新出生日期的基础上,个人身份证号码和一切工作良好,除了一件事。pid只取一次,因此所有200条记录的结果相同。我该怎么改变这个?
例如:第一个值的pid是30052766293,所以出生日期=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 $$

编辑:people和worker是独立的表,它们具有相同的列pid

wydwbb8l

wydwbb8l1#

因为你已经有了 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');

相关问题