MySQL Help REGEXP Попытка сократить почтовые индексы с 9 до 5 цифр - PullRequest
1 голос
/ 14 июля 2011

У меня есть таблица MySQL с адресами, а некоторые имеют 5-значные почтовые индексы, а некоторые имеют 9-значные почтовые индексы.Пример записи будет выглядеть следующим образом:

940 Huguenot Ave Staten Island, NY 10312-4313

Мне нужно стандартизировать базу данных и сделать все записи 5-значными почтовыми индексами.Мой код sudo для чего-то подобного был таким:

If regex [0](5 numeric digits )-[1](4 numeric digits) then update table replace('-[1]','');

Любая помощь будет принята с благодарностью!Спасибо,

ОБНОВЛЕНИЕ --- почтовый индекс не является независимым полем, он является частью адресного столбца, (пример выше)

Успех!В итоге я использовал комбинацию REGEX и SUBSTR, используя длину поля -5.Спасибо, ребята!

Ответы [ 4 ]

2 голосов
/ 14 июля 2011

Я не уверен, почему вы хотите использовать регулярные выражения, но я бы просто сделал:

update table set zip = substring(zip,1,5);

Я попробовал это, и это прекрасно работало

2 голосов
/ 14 июля 2011

Регулярные выражения MySQL могут только находить / сопоставлять текст, они не могут изменять данные в таблицах. Конечно, ничто не говорит о том, что вы не можете искать почтовые индексы с помощью регулярных выражений, но затем выполните обработку в сценарии.

SELECT ...
FROM ...
WHERE (zipcode REGEX '[[:digit:]]{5}-[[:digit:]]{4}')
1 голос
/ 14 июля 2011

MySQL не поддерживает операции замены регулярных выражений. Однако вы можете сначала найти записи, содержащие 9-значный почтовый индекс:

SELECT * FROM mytable WHERE ZIPcode REGEXP "[[:digit:]]{5}-[[:digit:]]{4}";

и затем удалите пять символов после тире.

0 голосов
/ 14 июля 2011

Я никогда не использовал regex в MySQL, но кажется, что более простое регулярное выражение будет просто проверять символ '-' и удалять все после него в строке вместо того, чтобы проверять правильное количество цифр. Извините, я не могу помочь вам с кодом, но, надеюсь, он поставит вас на правильный путь.

...