MySQL向列中的现有ID添加前导号
我得到了一个名为country_id的mysql数据库列,如:MySQL向列中的现有ID添加前导号,mysql,phpmyadmin,sql-update,Mysql,Phpmyadmin,Sql Update,我得到了一个名为country_id的mysql数据库列,如: country_id ---------- 1 2 59 435 2714 我现在要做的是将前导零添加到每个ID,因此结果将是: country_id ---------- 0001 0002 0059 0435 2714 每个ID最多应有4位数字。就这样 在PHPmyAdmin中是否有任何SQL语句可用于以上述方式更新此country_id列 致以最良好的祝愿 SELECT LPAD(country_id, 4, '0') F
country_id
----------
1
2
59
435
2714
我现在要做的是将前导零添加到每个ID,因此结果将是:
country_id
----------
0001
0002
0059
0435
2714
每个ID最多应有4位数字。就这样
在PHPmyAdmin中是否有任何SQL语句可用于以上述方式更新此country_id列
致以最良好的祝愿
SELECT LPAD(country_id, 4, '0')
FROM your_table
如果可以更改数据库结构,请使用
如果可以更改数据库结构,请在列上使用声明零填充:
mysql> create table foobar (nr integer(4) ZEROFILL);
Query OK, 0 rows affected (0.31 sec)
mysql> INSERT INTO foobar VALUES (1),(12),(123),(1234),(12345);
Query OK, 5 rows affected (0.05 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM foobar;
| 0001
| 0012
| 0123
| 1234
| 12345
在列上声明ZEROFILL:
mysql> create table foobar (nr integer(4) ZEROFILL);
Query OK, 0 rows affected (0.31 sec)
mysql> INSERT INTO foobar VALUES (1),(12),(123),(1234),(12345);
Query OK, 5 rows affected (0.05 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM foobar;
| 0001
| 0012
| 0123
| 1234
| 12345
如果country_id列是字符数据类型而非数字,则可以在零之前加上前缀并取最右边的部分:
UPDATE foo SET country_id = RIGHT(CONCATENATE('0000',country_id),4)
UPDATE foo SET country_id = LPAD(country_id, 4, '0')
注意:如果country_id的任何值超过4个字符,则这些语句中的任何一个都将导致数据丢失。。。第一个获取最严格的字符,第二个将获取最左边的四个字符,如果country_id超过四个字符。如果一个值有一个前导'-'字符,这将导致一个看起来很奇怪的值,例如'00-4'。LTRIM函数可用于删除前导空格
另一方面,如果country_id是一个数字数据类型,那么就不能真正添加前导零
对于整数类型,可以指定显示长度和ZEROFILL选项,例如
country_id INT(4) ZEROFILL
但是,由客户机应用程序使用长度修饰符和ZEROFILL属性来执行指定的格式化,在数据库中没有使用这些属性执行任何操作。MySQL命令行客户机将观察这些设置,并显示填充为零的值,最多四个字符。但其他客户不需要这样做
您还可以将该值强制转换为字符,并在查询中填充前导“0”字符:
SELECT LPAD(country_id, 4, '0') AS country_id
但请注意,返回的是字符类型,而不是数字。如果country\u id列是字符数据类型而不是数字,则可以在零之前加上前缀并取最右边的部分:
UPDATE foo SET country_id = RIGHT(CONCATENATE('0000',country_id),4)
UPDATE foo SET country_id = LPAD(country_id, 4, '0')
注意:如果country_id的任何值超过4个字符,则这些语句中的任何一个都将导致数据丢失。。。第一个获取最严格的字符,第二个将获取最左边的四个字符,如果country_id超过四个字符。如果一个值有一个前导'-'字符,这将导致一个看起来很奇怪的值,例如'00-4'。LTRIM函数可用于删除前导空格
另一方面,如果country_id是一个数字数据类型,那么就不能真正添加前导零
对于整数类型,可以指定显示长度和ZEROFILL选项,例如
country_id INT(4) ZEROFILL
但是,由客户机应用程序使用长度修饰符和ZEROFILL属性来执行指定的格式化,在数据库中没有使用这些属性执行任何操作。MySQL命令行客户机将观察这些设置,并显示填充为零的值,最多四个字符。但其他客户不需要这样做
您还可以将该值强制转换为字符,并在查询中填充前导“0”字符:
SELECT LPAD(country_id, 4, '0') AS country_id
但请注意,这将返回一个字符类型,而不是数字。从表中选择LPADcountry\u id,5,'0'作为country\u id;不设置数据,声明列INTEGER4 zerofill从表中选择LPADcountry_id,5,'0'作为country_id;不要设置数据,声明列整数4 ZEROFILL谢谢你提供ZEROFILL的链接,它帮助我理解了如何在PHPmyAdmin中声明!感谢您提供ZEROFILL的链接,它帮助我了解了如何在PHPmyAdmin中声明!