Что не так с этим запросом MySQL?(Пытаюсь повторно добавить начальные 0 к почтовым индексам)
Вопрос
У меня есть таблица почтовых индексов, и многие поля в ней потеряли ведущие нули во время импорта.У меня есть запрос, который должен повторно добавить нули слева, и я запустил этот запрос без ошибок, однако он говорит, что были затронуты 0 строк:
UPDATE `Zip Codes` SET Code = right(concat("00000",Code), 5) WHERE length(Code) < 5;
Кто-нибудь может увидеть, в чем может быть проблема?
Решение
Почтовые индексы, как и номера телефонов, всегда следует хранить в виде VARCHAR
нет INT
.
Почему?
Они не являются целыми числами и не представляют собой фактические числа.На самом деле вы их не сортируете, не увеличиваете и не суммируете, они не представляют собой какое-то количество, они представляют собой просто коды и теоретически могут содержать любые символы, включая буквы и знаки препинания.
Если бы они были целыми числами, то 00123
будет означать точно то же самое, что и 123
.
Например, ознакомьтесь с Страница Википедии о форматах почтовых индексов, существует множество разновидностей формата и длины.Даже в США есть расширения, благодаря которым они будут превышать те 5 цифр, которые вы выделили.
VARCHAR(32)
должно быть адекватным.
Другие советы
Какая ошибка это производит?
SELECT right(concat("00000",Code), 5) FROM `Zip Codes` WHERE length(Code) < 5;
.
что в основном то, что обновление пытается сделать.
Щелкните правой кнопкой мыши номер или столбец и нажмите «Форматировать ячейки» -> Special -> Zip-коды.В других случаях, когда вы хотите ведущие нули, вы могли бы сделать «Форматировать ячейки» -> Custom.Оттуда есть многочисленные варианты вы можете выбрать.