gpt4 book ai didi

mysql - 带前导零的 LPAD

转载 作者:IT王子 更新时间:2023-10-29 00:37:14 24 4
gpt4 key购买 nike

我有发票编号的表格。准则规定数字应包含 6 位或更多位数字。首先尝试做:

UPDATE t1 SET NUMER=CONCAT('00000',NUMER) WHERE LENGTH(NUMER)=1;   
UPDATE t1 SET NUMER=CONCAT('0000',NUMER) WHERE LENGTH(NUMER)=2;
UPDATE t1 SET NUMER=CONCAT('000',NUMER) WHERE LENGTH(NUMER)=3;
UPDATE t1 SET NUMER=CONCAT('00',NUMER) WHERE LENGTH(NUMER)=4;
UPDATE t1 SET NUMER=CONCAT('0',NUMER) WHERE LENGTH(NUMER)=5;

但这不是高效的,甚至是不漂亮的。我尝试了 LPAD 函数,但随后出现了问题,因为函数:

UPDATE t1 SET NUMER=LPAD(NUMER,6,'0') WHERE CHAR_LENGTH(NUMER)<=6 ;

返回受影响的零行。还用谷歌搜索,他们说将零放入引号可以解决问题,但没有任何帮助吗?每天导入。

编辑:列 NUMER 是 INT(19) 并且已经包含如下数据:

NUMER
----------
1203
12303
123403
1234503
...

(此时已经填充了3到7位不同长度的数据)

最佳答案

我认为您应该考虑到,您阅读的指南适用于应如何显示 发票,而不是应如何在数据库中存储

当一个数字存储为 INT 时,它就是一个纯数字。如果在前面加零,再存储一次,还是一样的数。

您可以按如下方式选择 NUMER 字段,或为该表创建一个 View :

SELECT LPAD(NUMER,6,'0') AS NUMER
FROM ...

或者,与其在从数据库中选择数据时更改数据,不如考虑在显示时用零填充数字,并且仅在显示时才进行填充。

我认为您对历史数据保持不变的要求尚无定论。即使是历史数据,编号为001203的发票与编号为1203的发票相同。

但是,如果您绝对必须按照您描述的方式进行操作,那么转换为 VARCHAR 字段可能会起作用。转换后的历史数据可以按原样存储,任何新条目都可以填充到所需数量的零。但我不建议这样做。

关于mysql - 带前导零的 LPAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17612920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com