У меня есть таблица с номерами счетов. Руководящие принципы говорят, что цифры должны иметь 6 или более цифр. Прежде всего, пытался:LPAD с ведущим нулем
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 ;
возвращает нулевое значение строки пострадавших. Также googled, и они говорят, что положить ноль в кавычки решит проблему, но не помогло? Это ежедневный импорт.
РЕДАКТИРОВАТЬ: Колонка NUMER является INT (19) и содержат уже данные, такие как:
NUMER
----------
1203
12303
123403
1234503
...
(он заполнен данными с различной длиной от 3 до 7 цифр к настоящему времени)
Какой тип данных имеет ваш столбец 'NUMER'? И не использует ли атрибут «ZEROFILL» числовое значение, которое уже не решает проблему? http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html – CBroe
Вы не можете обновить столбец INT, чтобы содержать переменное число ведущих/конечных нулей. Кроме того, INT (19) бессмысленно. Это не целое число с 19 цифрами. Это 4-байтное целое число (от 2 до 32), с длиной дисплея 19. Длина отображения делает то, что она говорит - это количество цифр, которое он будет отображать, поэтому он ничего не делает с реальной длиной числа в цифрах. Короче говоря, начните с 6-значного счета и продолжайте увеличивать число. –
@CBroe, нет, ZEROFIL не очень хорошо, потому что у меня есть исторические данные, например. 1203 изменен на 001203, и у меня 7 цифр. Поэтому я буду менять всю историю после каждого номера цифр – jaczes