Split de l'Adresse de colonne dans des colonnes distinctes en mode SQL
J'ai une Adresse de colonne dans une table que j'ai besoin de le diviser en plusieurs colonnes dans une vue dans SQL Server 2005. J'ai besoin de diviser la colonne sur le caractère de saut de ligne, chr(10), et il pourrait être de 1 à 4 lignes (de 0 à 3 sauts de ligne) dans la colonne. Ci-dessous, quelques exemples de ce que je dois faire. Quelle est la façon la plus simple de faire cela?
Examples:
Address Address1 Address2 Address3 Address4
------------ = ----------- ----------- ----------------- ---------
My Company My Company 123 Main St. Somewhere,NY 12345
123 Main St.
Somewhere,NY 12345
Address Address1 Address2 Address3 Address4
------------ = ------------ ---------- ----------- ---------
123 Main St. 123 Main St.
Les données sont pas stockées dans une seule colonne?
Toutes les lignes d'adresse sont stockées dans une seule colonne.
Toutes les lignes d'adresse sont stockées dans une seule colonne.
OriginalL'auteur Jamie | 2010-02-05
Vous devez vous connecter pour publier un commentaire.
cela va diviser l'adresse à l'aide de la parsename de la fonction et de la combiner avec FUSIONNENT pour saisir la bonne info dans la colonne appropriée
si vous avez plus de 4 lignes, cette méthode ne fonctionnera PAS
edit: ajouté le code pour inverser l'ordre
ajouté le code pour inverser l'ordre
Ok, il est presque là. Le seul problème que je vois, c'est maintenant que se retourne la valeur NULL pour tous les quatre champs si il y a un saut de ligne à la fin de la source de champ. En d'autres mots, il y a un vide de la dernière ligne. Est-il une manière pour nous de le nettoyer tous les retours à la ligne et/ou des espaces à la fin qui pourrait être jeter? Merci à tous pour votre aide SQLMenace!
Jamie, avez-vous essayé la solution que j'ai posté? Il faut juste traiter quoi que ce soit après une 4ème saut de ligne en plus de données sur la 4e ligne (cependant cela indique encore un autre problème d'intégrité des données de votre solution).
Aaron, j'ai essayé votre solution et le résultat est exactement ce dont j'ai besoin. Le seul problème est la vitesse. Je n'ai pas parlé de l'exécution dans mon post original, mais il a besoin pour s'exécuter le plus rapidement possible. La solution ci-dessus s'exécute deux fois plus rapide que celui que vous avez posté, mais votre sortie semble être sur place. Voyez-vous une façon d'optimiser votre solution. Merci beaucoup pour votre aide.
OriginalL'auteur SQLMenace
C'est terriblement méchant... je recommande fortement que si vous voulez traiter chaque ligne de l'adresse séparément, que de les stocker correctement en premier lieu. Au lieu de continuer à faire ce que vous faites, ajouter des colonnes supplémentaires, corriger les données existantes une fois (au lieu de "fixation" à chaque fois que vous exécutez une requête), et ensuite ajuster la procédure stockée qui ne l'insérer /mettre à jour pour qu'il sache utiliser les autres colonnes.
Denis PARSENAME() truc est beaucoup plus propre, bien sûr, mais vous devez être extrêmement prudent sur l'utilisation d'un caractère de remplacement qui est vraiment impossible à apparaître dans les données de façon naturelle. L'accent circonflexe (^) est probablement une bonne idée, mais comme je l'ai dit, vous devez être prudent.
Il y a aussi des paquets de logiciel qui sont vraiment bonnes à frotter l'adresse et d'autres données démographiques. Mais le nettoyage de l'entrée de données est la chose la plus importante ici que je vais continuer à insister... si chaque ligne de l'adresse doit être traitée séparément, puis de les stocker de cette façon.
Eh bien, tant que les utilisateurs sont prêts à attendre pour la vue d'effectuer cette séparation à chaque fois que vous exécutez une requête... alors je suppose que vous avez raison, c'est ce qu'il est (de merde).
OriginalL'auteur Aaron Bertrand
L'analyse du texte dans SQL n'est pas amusant. Si je devais faire quelque chose comme ça, je serais à l'exportation de la colonne d'un fichier texte csv et de l'analyser dans le langage de script comme Perl/PHP/Python. De cette façon, je peux profiter de construit dans les fonctions de chaîne et d'expression régulière de langage de script.
OriginalL'auteur Yada