2011-07-14 3 views
1

私は住所付きのMySQLテーブルを持っていて、いくつかは5桁の郵便番号を持ち、一部は9桁の郵便番号を持っています。サンプルレコードはこのようになりますMySQLのヘルプREGEXP郵便番号を9桁から5桁に短縮しようとしています

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]',''); 

助けていただければ幸いです! おかげで、

UPDATE --- 郵便番号は、独立したフィールドではありませんが、それはアドレス欄の一部であり、

成功(サンプルは上記です)! フィールド-5の長さを使ってREGEXとSUBSTRの組み合わせを使用しました。みんなありがとう!

+0

を働いて、あなただけの最初の5つを取ることができません文字? –

答えて

1

MySQLは正規表現置換操作をサポートしていません。

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

をして、ダッシュ、以下の5つの文字を削除します。ただし、最初の9桁のZIPコードが含まれているそれらのレコードを見つけることができます。

+0

郵便番号が既に私の住所の一部であった場合はどうすればいいですか? (私の元のポストのように) – Andre

+0

これは私のアドレスフィールドで働いた、私は今私のためにそれを修正するためのスクリプトを書くだろうね!ありがとうございました – Andre

0

MySQLで正規表現を使ったことはありませんでしたが、単純な正規表現のように ' - '文字がチェックされ、正しい数字を確認する代わりに文字列内のすべてが削除されるようです。申し訳ありませんがコードであなたを助けることはできませんが、うまくいけば、あなたは正しい軌道に乗ります。

2

MySQL正規表現はテキストの検索/一致のみ可能で、テーブル内のデータは変更できません。もちろん、正規表現で郵便番号を検索することはできませんが、スクリプトで処理してはいけません。

SELECT ... 
FROM ... 
WHERE (zipcode REGEX '[[:digit:]]{5}-[[:digit:]]{4}') 
+0

郵便番号が既に私の住所の一部だったらどうしますか? (私の元の投稿のように) – Andre

+0

クエリは正規表現が一致する行を返しますので、アドレスフィールドの正規表現を実行してください。あなたのテーブルの構造がわからないので、私はフィールドとして 'zipcode'を入れます –

+0

私はこの試みを試しました* FROM' institution' WHERE( 'Address' REGEX '[[:digit:]] {5} - [[:digit:]] {4} ')、エラーが発生しました – Andre

2

イムはないあなたが正規表現を使用したい理由を確認してください、私はちょうど行うだろう:

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

私はこれを試してみましたが、それは美しく

+0

郵便番号が私の住所の一部であり、郵便番号の列でなかったらどうすればいいですか? (私の元のポストのように) – Andre

+0

私はそれがコラムの一部であることを知らなかった。私は謝罪します! – jworrin

関連する問題