Ich habe Tabelle mit Rechnungsnummern. Richtlinien sagen, dass Zahlen 6 oder mehr Ziffern haben sollten. Zuerst einmal versucht zu tun:LPAD mit führender Null
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;
aber das ist nicht effizient und sogar hübsch. Ich habe versucht, LPAD
Funktion, aber dann kam Problem, weil Funktion:
UPDATE t1 SET NUMER=LPAD(NUMER,6,'0') WHERE CHAR_LENGTH(NUMER)<=6 ;
gibt Null Zeilen betroffen. Auch googelt und sie sagen, dass Null in Anführungszeichen setzen Problem lösen wird, aber tat, keine Hilfe? Es ist täglicher Import.
EDIT: Column NUMER ist INT (19) und enthält bereits Daten wie:
NUMER
----------
1203
12303
123403
1234503
...
Welchen Datentyp hat Ihre 'NUMER'-Spalte? Und wenn Sie das 'ZEROFILL'-Attribut nicht auf einen numerischen Wert anwenden, lösen Sie Ihr Problem nicht schon? http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html – CBroe
Sie können die Spalte INT nicht aktualisieren, um die Anzahl der führenden/abschließenden Nullen zu enthalten. Auch INT (19) ist sinnlos. Das ist keine Ganzzahl mit 19 Ziffern. Es ist eine 4-Byte-Integer (2 bis 32), mit einer Display-Länge von 19. Display-Länge tut, was es sagt - es ist, wie viele Ziffern es angezeigt wird, daher tut es nichts mit der tatsächlichen Länge der Zahl in Ziffern. Lange Rede, kurzer Sinn - beginnen Sie mit einer 6-stelligen Rechnung und erhöhen Sie die Anzahl. –
@CBroe, nein, ZEROFIL ist nicht gut, weil ich historische Daten z. 1203 hat sich in 001203 geändert, und ich habe 7 Ziffern. Also werde ich alle Geschichte nach jeder Zahl von Ziffern Erweiterung – jaczes