零填充:使用纯sql将MD-1转换为MD-001

时间:2014-05-19 10:11:45

标签: mysql phpmyadmin

我需要帮助。

我正在使用Mysql / phpmyadim。

我有一个db表,用于存储人员的姓名和代码ID。

+--------+---------+
| Name   | code_id |
+--------+---------+
| Nazeer | MD-1    |
+--------+---------+

我有10个联系人和ID。我正在使用用于生成自动代码的php程序。

最近我从excel文件中将更多记录导入db,并将记录增加到5000 +。

我的php自动代码停止生成代码,导致代码ID出现语法错误。

我发现我的excel导入的代码ID类似于MD-1,MD-2等,而我的程序使用自动代码编号为3位数,因为我的记录超过了数千,其中4位数字给出了语法错误。

我做了一些关于解决问题的研究,答案是改变所有2位数字,例如。 " MD-1" 〜" MD-99" TO" MD-001" 〜" MD-099"我的程序将再次运作。

所以问题是我如何在phpmyadmin sql中更改它。我需要保持' MD - '并添加' 0'然后加上相应的数字。

感谢并提前感谢您的帮助。

Regrds。

4 个答案:

答案 0 :(得分:0)

我假设您要将内容MD-1更新为MD-001,将MD-99更新为MD-099。要做到这一点,你可以编写一个PHP代码来逐个检索行,并且必须匹配模式然后更新。这是一些有用的链接。 link 1 提示:您可以检查5位数字符串,然后在3位置添加另一个0。(使用[exploid]拆分" - "然后连接" -0" { {3}})只有使用MYSQl才能做同样的事情,因为它不是编程语言。而其他的东西是PHP不是一个程序。它是一种编程语言。

答案 1 :(得分:0)

运行UPDATE查询并使用CONCAT函数:

 for ($x=0; $x=<upto>; $x++){
    UPDATE <table_name>
    SET <columnname>= CONCAT('MD-',0,$x) 
    WHERE <columnname>= CONCAT('MD-',$x)
 }

答案 2 :(得分:0)

这个sql会更新你的所有数据,但就像我在评论中说的那样,你最好修改你的PHP代码。

警告:此sql仅在假设所有数据的格式为[MD-xxx]且数量为3或更少的情况下才有效

UPDATE your_table SET 
    code_id=case length(substr(code_id,4)) 
        WHEN 1 THEN concat("MD-00",substr(code_id,4)) 
        WHEN 2 THEN concat("MD-0",substr(code_id,4)) 
        ELSE code_id END;

答案 3 :(得分:0)

以下简单的更新命令可以帮助您。

UPDATE mytable 
SET code_id=IF(LENGTH(code_id)=4,CONCAT(SUBSTRING_INDEX(code_id,'-',1),'-00',SUBSTRING_INDEX(code_id,'-',-1)),IF(LENGTH(code_id)=5,CONCAT(SUBSTRING_INDEX(code_id,'-',1),'-0',SUBSTRING_INDEX(code_id,'-',-1)),code_id));