2012-03-13 1 views
1

J'ai une table de codes postaux, et beaucoup de champs dedans ont perdu leurs zéro principaux pendant l'importation. J'ai une requête qui devrait ajouter à nouveau les zéros à gauche et je l'ai exécuter cette requête sans erreur, mais il dit 0 lignes ont été affectées:Quel est le problème avec cette requête MySQL? (Essayer de re-ajouter les 0 principaux aux codes postaux)

UPDATE `Zip Codes` SET Code = right(concat("00000",Code), 5) WHERE length(Code) < 5; 

Toute personne en mesure de voir ce que le problème pourrait être?

+0

Quelle erreur obtenez-vous lorsque vous essayez d'exécuter sur la console? –

+1

Comment avez-vous défini la colonne 'Code', int? ou char? – PasteBT

+1

Les stockez-vous en tant que VARCHAR? Comment validez-vous réellement que les zéros sont manquants? Par exemple, exporter vers Excel peut supprimer des zéros en tête (problème que j'ai rencontré plusieurs fois). Je suppose que vous avez stocké comme INT et c'est pourquoi il a été abandonné. Utilisez VARCHAR. –

Répondre

4

Les codes postaux, comme les numéros de téléphone, doivent toujours être enregistrés sous la forme VARCHAR et non INT.

Pourquoi?

Ils ne sont pas des entiers et ne représentent pas les nombres réels. Vous n'êtes pas vraiment en train de les trier, vous ne les incrémentez pas ou ne les additionnez pas, ils ne représentent pas une quantité de quelque chose, ils sont simplement des codes - et peuvent théoriquement contenir n'importe quel caractère incluant alphas et ponctuation.

S'ils étaient des entiers, alors 00123 signifierait exactement le même que 123.

Par exemple, consultez le Wikipedia page on Zip Code Formats, il existe de nombreuses variétés de format et de longueur. Même aux États-Unis, il existe des extensions qui les feront dépasser les 5 chiffres que vous avez indiqués.

VARCHAR(32) devrait être adéquat.

+0

Dans votre logique d'application, je conseillerais toujours une tentative d'intégrité renforcée, que ce soit le formatage ou la vérification par rapport à une base de données de codes postaux connue. –

+0

Merci pour l'info, dans cette application particulière, je vais seulement avoir besoin d'extraire les codes postaux et leur précision n'est même pas particulièrement important. Il n'y aura plus d'ajouts à la liste, donc je vais probablement le laisser à 5 dans cette circonstance. =) –

+0

Bien que ce ne soit pas la même chose, j'ai appris une leçon difficile une fois quand j'ai stocké des numéros de compte entièrement numériques comme INT. Dans mon code PHP, je passais à l'entier et certains numéros de compte ont atteint le plafond et plusieurs dupes sont apparus comme 2147483647, comme ceci: http://codepad.org/9shZ1yC8 Pas la même chose, juste une histoire similaire d'échec que je voulais partager. Nous avons dû bluffer l'échec matériel pour sauver le visage. –

0

Quelle erreur cela produit-il?

SELECT right(concat("00000",Code), 5) FROM `Zip Codes` WHERE length(Code) < 5; 

Voilà essentiellement ce que la mise à jour essaie de faire.

0

Cliquez avec le bouton droit sur le numéro ou la colonne et cliquez sur "Mettre en forme les cellules" -> Spécial -> Codes ZIP. Dans les autres cas où vous voulez des zéros en tête, vous pouvez faire "Formatage des cellules" -> Personnalisé. De là, il y a de nombreuses options que vous pouvez sélectionner.

Questions connexes