2009-04-07 15 views
1

J'utilise une base de données MS Access pour suivre certaines tâches au cours de l'année. Chaque tâche a une échéance Mois. Je ne veux pas utiliser les dates exactes car la convention dans mon équipe est de se référer au mois. Je ne veux pas stocker les dates dans un format de date, car les membres de l'équipe entreront le mois prévu à la main.Tri par mois dans MS Access

Est-il possible de trier mes champs dans l'ordre de date si la date est stockée en tant que chaîne de caractères mois? (par exemple janvier, février plutôt que 31/01/2009, 28/02/2009).

Si tel est le cas, à quoi ressemblerait une telle requête?

Merci d'avance.

Répondre

0

Cela devrait fonctionner

SELECT * DE TableName OrderBy Mois (date_field)

+0

L'OP enregistre le mois - donc votre code ne fonctionnera pas –

0

Je stocker le mois comme un entier 1-12 alors vous pouvez facilement les trier.

2

Si vous ne stockez que le nom du mois, vous devrez d'abord convertir une date pour obtenir un numéro de mois, utiliser une table de recherche (MonthNo, MonthName) ou utiliser la fonction Switch. Voici un exemple de conversion à une date:

SELECT Month(CDate(Year(Date()) & "/" & [MonthNameField] & "/1")) AS MonthNo 
FROM Table 

Cependant, il y a probablement un bon argument pour stocker une date en fonction du nom du mois entré, cela empêcherait toute confusion années.

+0

Juste pour clarifier, la requête telle que requise par l'OP serait SELECT ... FROM ... WHERE ... ORDER BY Month (CDate (Année (Date()) & "/" & [MonthNameField] & "/ 1")). –

+0

+1 pour l'utilisation de la table de recherche. – Arvo

0

Je voudrais créer un champ de date.

Je stockerai le 1er janvier 2009 pour le 1er janvier 2009, le 1er janvier 2009 pour le mois de février 2009, etc. À des fins d'affichage, je le formater pour qu'il affiche uniquement le mois (ou mois + année - ne peut pas imaginer comment vous ne voudriez pas l'année).

Cela permet de tirer parti des opérations de date sur le terrain sans conversion désordonnée des formats texte à date.

0

Merci à tous pour vos réponses. Désolé pour le délai de réponse - je travaille à nouveau sur ce problème maintenant. Par souci de clarté, le DB doit être utilisé pour suivre un calendrier des événements dans une période de 12 mois. L'année n'a pas besoin d'être stockée car tout dans la BD fait référence à la même année. Une nouvelle copie de la base de données sera faite au début de 2010.

Je suis vraiment désireux de réellement stocker le mois comme un mot plutôt que comme un champ de valeur ou de date comme lorsque l'ajout de tâches en masse, je vais probablement modifier la table directement plutôt que d'utiliser un formulaire.

0

Je sais que c'est mort, mais Google m'a amené ici alors que je cherchais donc pensé que je pourrais y ajouter:

J'ai eu ce problème moi-même (Access 2010) et a trouvé une réponse décente ici: http://www.vbforums.com/showthread.php?503841-How-to-Convert-MonthName-to-Value(Microsoft-access-2003)

Donc, ce que j'ai fait était d'avoir une requête qui a sorti les mois DISTINCT de ma table. Ensuite, dans la vue de conception, j'ai ajouté une autre colonne avec MonthNo: Month(CDate("1 " & [Month])) et trié la requête sur cette colonne

espérons que cela aide quelqu'un si ce n'est l'OP.