我有一个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]','');
任何帮助将不胜感激!谢谢你,
更新—Zipcode不是一个独立的字段,它是地址列的一部分,(上面有一个示例)
成功!我最终使用了REGEX和SUBSTR的组合,使用字段的长度-5。谢谢你,伙计们!
MySQL正则表达式只能查找/匹配文本,不能修改表中的数据。当然,没有人说你不能用正则表达式搜索邮政编码,但是在脚本中进行处理。
SELECT ...
FROM ...
WHERE (zipcode REGEX '[[:digit:]]{5}-[[:digit:]]{4}')
我不知道你为什么要使用regexp,但我只是这样做:
update table set zip = substring(zip,1,5);
我试了一下,效果很好
MySQL不支持正则表达式替换操作。但是,您可以首先找到包含9位邮政编码的记录:
SELECT * FROM mytable WHERE ZIPcode REGEXP "[[:digit:]]{5}-[[:digit:]]{4}";
,然后删除破折号后面的五个字符。
我从未在MySQL中使用过regex,但它似乎是一个更简单的正则表达式,只需检查'-'字符并删除字符串中它之后的所有内容,而不是检查正确的数字数。对不起,我不能帮助你的代码,但希望它能让你在正确的轨道上。