Mysql使用0更新帐号

Mysql使用0更新帐号,mysql,Mysql,我遇到的情况是,如果账号长度小于11,我需要更新账号,因此如果账号长度不满足11,则需要用0填充账号。因此,如果号码是123456,则需要在数据库中将其更新为00000123456 我已经为它创建了一个存储过程,它工作正常 我想知道有没有更好的办法 这是我的SP DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Update_AccountNumber`() BEGIN Drop TABLE IF EXISTS temp_

我遇到的情况是,如果账号长度小于11,我需要更新账号,因此如果账号长度不满足11,则需要用0填充账号。因此,如果号码是123456,则需要在数据库中将其更新为00000123456

我已经为它创建了一个存储过程,它工作正常

我想知道有没有更好的办法

这是我的SP

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Update_AccountNumber`()
BEGIN
Drop TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE IF NOT EXISTS temp_table (id INT(11),accountnumber varchar(50),
                                                            length int,PRIMARY KEY (`id`));

Insert into temp_table(id,accountnumber, length)
select a.id,a.account_number,length(a.account_number) from accounts a
inner join programs p on a.program_id = p.id
where p.abbreviation = 'UA'
and length(a.account_number) < 11;

set @count = (Select count(*) from temp_table);
While @count > 0 Do 
    set @id = (Select id from temp_table limit 0,1);        
    set @accountnumber = (Select accountnumber from temp_table limit 0,1);        
    set @length = (Select length from temp_table limit 0,1);
    set @newlength = 11 - @length;
    Delete from temp_table where id = @id;

    While @newlength > 0 Do 
        set @accountnumber = concat("0" , @accountnumber);
        set @newlength = @newlength - 1;
    End While;
    Update accounts set account_number = @accountnumber where id = @id;
    set @count = (Select count(*) from temp_table);
End While;
END
谢谢

在数据库中使用零填充。当您插入123时,它将成为00000000123

这里也说明了这一点:

试试这个

UPDATE accounts
SET account_number = CONCAT(REPEAT('0', 11-LENGTH(account_number)), CONVERT(account_number, CHAR(100)))
WHERE LENGTH(a.account_number) < 11;

嘿,傻瓜,我们有什么方法可以做与上述相反的事情吗?我们可以从账号中删除添加的0吗?实际上我更新了记录,但忘记添加一个条件,所以它也更新了其他记录,我需要回滚这些记录,有什么方法吗?是的。。。尝试更新帐户将帐户\u编号=CASTaccount\u编号设置为未签名