2009-10-23 5 views
2

J'ai une table dans la base de données MS Access et j'ai besoin de créer une requête pour réduire le résultat. Par exemple:Requête d'accès SQL nécessaire pour réduire le résultat

est ici la table:

------------------------------------- 
search code | relation | environment | 
------------------------------------- 
Server.PRD | installs | Production | 
------------------------------------- 
Server.DEV | installs | Development | 
------------------------------------- 

Le résultat que je dois afficher dans une vue de requête:

--------------------------------------------------------- 
search code short | search code | relation | environment | 
--------------------------------------------------------- 
Server   | Server.PRD | installs | Production | 
--------------------------------------------------------- 
Server   | Server.DEV | installs | Development | 
--------------------------------------------------------- 

Il est difficile pour moi de concevoir une requête pour afficher le résultat comme ci-dessus. Par conséquent, j'ai essayé de décomposer la tâche en petits morceaux, mais maintenant je suis coincé sur la toute première étape:

J'ai essayé de couper les caractères 'PRD' ou 'DEV' (certains d'entre eux sont 4 caractères comme « PROD » et ils ne sont pas toujours à la fin d'un code de recherche par exemple, il pourrait être « Server.PROD.DB »), la requête que je courais était:

SELECT TRIM(TRAILING 'PRD' FROM SELECT search code FROM TABLENAME) 

mais cela ne semble pas fonctionner. Quelqu'un pourrait-il me donner quelques idées pour écrire une requête pour afficher le résultat?

Merci d'avance.

Répondre

2

Essayez LEFT([search code], LEN([search code])-3)

EDIT: Pour rechercher le ., utilisez la fonction INSTR, comme ceci: LEFT([search code], INSTR([search code], '.') - 1)

EDIT: Pour gérer la valeur NULL, chaîne vide, etc:

IIF 
(
    (INSTR([search code], '.') = 0 OR [search code] IS NULL), 
    [search code], 
    LEFT([search code], INSTR([search code], '.') - 1) 
) 

Notez que cela ne gère pas plus d'un . dans le même valeur.

+0

merci pour la réponse rapide.La fonction de la ligne fonctionne! mais ce dont j'ai besoin, c'est plus que de couper les trois derniers caractères de chaque code de recherche. Veuillez vous référer à la phrase en gras dans ma question. désolé pour l'ambiguïté. – jiaoziren

0
SELECT [search code short] = LEFT([search code], InStr([search code], '.') - 1), 
     [search code], 
     relation 
     environment 
FROM TABLENAME 
+0

Votre construction SELECT = ne fonctionne pas pour moi en mode de requête ANSI-92. Est-ce juste une chose ANSI-89 Query Mode? – onedaywhen

+0

... ne gère pas toutes les éventualités, par ex. la valeur NULL, la chaîne vide, etc. – onedaywhen

+0

Essayez de changer '[code de recherche court] = LEFT ([code de recherche], InStr ([code de recherche],'. ') - 1)' à 'LEFT ([code de recherche], InStr ([code de recherche], '.') - 1) AS [code de recherche court] '. La question ne dit rien sur les valeurs NULL ou les chaînes vides ... [:)] –

Questions connexes