2011-07-31 4 views
1

J'ai une colonne dans sql server 2008 qui est un varchar (255). La colonne est pleine de 'mesures' et il y a environ 15 000 enregistrements. Comme la colonne est de type string et a été entrée manuellement par l'utilisateur, elle est devenue en désordre par ex.extraction de chaîne sql

  • 100x200cm
  • 200x400mm
  • 3" par 9"
  • 30 x 20
  • 12 cm de long

Fondamentalement, je besoin d'extraire toutes les mesures (que je peux) en utilisable dimensionner et stocker chaque unité dans une nouvelle colonne (hauteur/largeur/profondeur).

Quelqu'un peut-il suggérer le meilleur moyen de le faire?

Je regardais l'expression régulière, mais pas sûr de la meilleure façon

+2

Bonne chance pour celui-là. Je ne le ferais pas en SQL de toute façon: beaucoup trop de combinaisons à analyser. – gbn

Répondre

1

Je recommande un analyseur très stricte qui jette une exception chaque fois qu'il rencontre quelque chose qu'il ne peut pas gérer explicitement. De cette façon, vous êtes à l'abri des surprises. Tout d'abord, vous devez utiliser un langage de script pour cela.

Fetch les dossiers et itérer sur eux et pour chaque enregistrement que vous essayez de l'analyser:

  • ^([1-9][0-9]*)x([1-9][0-9]*)([a-z]+)$ - si elle correspond, vous correspondez $3 contre une liste d'unités valides, par exemple « cm », "mm", "m", etc.

  • ^([1-9][0-9]*)([^ ]+) by ([1-9][0-9]*)(.+)$ - si elle correspond, comparez les unités lors d'un match $2 et $4. Faites-les correspondre à nouveau à une liste d'unités valides, et si cela réussit, mais qu'elles ne sont pas identiques, convertissez l'une dans l'autre.

Vous continuez à ajouter des contrôles stricts pour chaque élément qui jette une exception. De cette façon, votre liste d'expressions s'étend avec les cas que vous gérez.

+0

Remarque: SQL Server ne prend pas en charge regex dans T-SQL – gbn

+0

C'est pourquoi j'ai noté d'utiliser un langage de script. – Shi

+0

Désolé, c'était pour OP, pas pour vous. Oracle a regex et quelques gens se mélangent ... :-) – gbn