2009-04-16 14 views
1

Dans MS Access 2003, je les valeurs suivantes dans une colonnechaîne Microsoft Access analyse

0-0-60 
20-0-0-24S 
20.5-0-0-24S 
32-0-0 

Comment puis-je écrire ma requête telle que je peux tirer le 3ème élément de la colonne, par exemple le « 60 » de "0-0-60". Gardez à l'esprit que j'ai éventuellement la 4ème colonne également.

+0

Vous ne devez JAMAIS mettre des valeurs mutliple dans la même colonne. C'est anti-pattern bien connu. –

+1

C'est génial Joel. Merci pour votre commentaire. Cependant, je n'ai pas créé cette colonne, elle m'a été donnée par quelqu'un d'autre. Je ferai en sorte de transmettre votre sage conseil à l'auteur. – Robert4Real

Répondre

3

vous voulez généraliser cette fonction pour le délimiteur et quelle position, mais:

Public Function SplitString(inputString As String) As String 
    Dim TestArray() As String 
    TestArray = Split(inputString, "-") 
    Debug.Print TestArray(2) 
    SplitString = TestArray(2) 
End Function 

Vous pouvez appeler dans votre requête comme ceci:

SELECT SplitString([MyField]) AS Expr1 
FROM MyTable; 

Bonne chance!

+0

Vous voudrez également lui donner un meilleur nom, et gérer les erreurs - en particulier 'Subscript out of range'. –

-1

Je crois qu'une expression en ligne comme celle-ci sur l'outil de création de requête ferait le travail (non testé).

right(yourColumnNam, inStrRev(yourColumnName, '-')) 
+0

Cela récupère la dernière valeur - qui ne fonctionnera pas quand il y a quatre valeurs –

1

Y aura-t-il jamais moins de 3 articles dans chaque colonne?

Vraiment si vous avez un format très spécifique, soit 3 décimales ou 4 décimales comme valeurs, j'envisager de modifier votre schéma à

Value1 decimal 
Value2 decimal 
Value3 decimal 
Value4 decimal (NULLABLE) 

mais c'est un peu à côté du point ...

Si vous êtes vraiment coincé avec cela, alors il est probablement plus rapide pour analyser dans votre code, que de faire un peu méchant gauche/droite/travail instr dans le

accès SQL Query
+0

Je vais toujours avoir au moins 3 éléments. – Robert4Real

0

Le fait que vous trouviez cela non-trivial pour interroger votre colonne de données est ce que nous appelons une «odeur».

Cela ressemble exactement à une violation de première forme normale (1NF) car vous avez des données non-scalaires dans une seule colonne. Je crois que vous partagez ces valeurs pour un exercice ponctuel de nettoyage des données afin de résoudre le problème une fois pour toutes (auquel cas j'utiliserais personnellement le texte d'Excel pour les colonnes si le jeu de résultats était petit).

Si vous proposez de le faire dans une requête pour votre application, je vous suggère de rechercher la normalisation et de modifier votre schéma en conséquence.

Questions connexes