Mam tabelę z numerami faktur. Wytyczne mówią, że liczby powinny składać się z 6 lub więcej cyfr. Przede wszystkim próbowałem zrobić:LPAD z wiodącym zerem
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;
ale to nie jest wydajne, a nawet ładne. Próbowałem LPAD
funkcję, ale potem problem, ponieważ funkcję:
UPDATE t1 SET NUMER=LPAD(NUMER,6,'0') WHERE CHAR_LENGTH(NUMER)<=6 ;
zwraca zero wierszy dotknięte. Również googled i mówią, że wprowadzenie zero w cudzysłów rozwiąże problem, ale nie, jakiejkolwiek pomocy? To codzienny import.
Edycja: Kolumna LICZBA int (19) i zawiera już danych: a
NUMER
----------
1203
12303
123403
1234503
...
(to jest wypełnione danymi o różnej długości od 3 do 7 cyfr teraz)
Jaki typ danych ma Twoja kolumna 'NUMER'? I czy nie używasz atrybutu 'ZEROFILL' na wartości numerycznej, który nie rozwiązał już twojego problemu? http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html – CBroe
Nie można zaktualizować kolumny INT, aby zawierała zmienną liczbę początkowych/końcowych zer. Również INT (19) jest bez sensu. To nie jest liczba całkowita z 19 cyframi. Jest to 4-bajtowa liczba całkowita (2 do potęgi 32), z długością wyświetlania równą 19. Długość wyświetlania robi to, co mówi - jest to liczba cyfr wyświetlanych, dlatego nie ma nic wspólnego z rzeczywistą długością liczby cyfr. Krótka historia - zacznij od sześciocyfrowej faktury i zwiększaj liczbę. –
@ CBroe, nie, ZEROFIL nie jest dobry, ponieważ mam dane historyczne, np. 1203 zmieniono na 001203, a ja mam 7 cyfr. Tak więc będę musiał zmienić całą historię po każdym rozszerzeniu o jedną cyfrę – jaczes