2010-11-05 9 views
0

J'ai une requête assez simple, mais je voudrais qu'elle renvoie les résultats dans l'ordre du plus tôt au plus tard. La colonne en question est une "courte période". C'est ce que j'ai en ce moment:Comment commander une requête Access par une colonne de fois

SELECT * 
FROM tasksetup 
ORDER BY whenend ASC 

Quelle est la syntaxe appropriée pour que cela fonctionne?

En tant que mise à jour: Lorsque j'exécute cette requête, cela fonctionne très bien en ce qu'elle se termine. Cependant, la requête terminée n'est pas ordonnée comme je le souhaite. Il renvoie les résultats à peu près dans le même ordre que dans la table, plutôt que d'être ordonnée par whenend.

Mise à jour 2: Je suppose que cela fonctionne. Je ne sais pas ce qui était différent hier, mais maintenant sa commande va bien. Oh science informatique.

+4

Um ... est-ce que cette syntaxe ** ne fonctionne pas? Parce que ça me semble correct. S'il vous plaît élaborer sur ce qui ne va pas. –

Répondre

2

Je ne vois pas pourquoi votre requête ne fonctionne pas ... sauf si whenend inclut un composant date qui n'est pas visible dans votre format. Le type de données Jet/ACE Date/Heure toujours inclut un composant entier pour représenter la date; la composante fractionnaire représente l'heure du jour.

Voir ce que vous obtenez avec ceci:

SELECT Format(whenend, "yyyy/mm/dd hh:nn:ss") AS full_date_time 
FROM tasksetup 
ORDER BY 1 ASC 

Peut-être cette session dans la fenêtre immédiate contribuera à clarifier Date/heure Type de données:

? Now() 
11/5/2010 2:19:54 PM 
? Format(Now(), "short time") 
14:20 
? CDbl(Now()) 
40487.5977546296 
? CDate(0) 
12:00:00 AM 
? Format(CDate(0), "yyyy/mm/dd hh:mm:ss") 
1899/12/30 00:00:00 

Mise à jour: J'ai créé une table nommée tasksetup avec un champ Date/Heure nommé whenend avec la propriété Format du champ définie sur Short Time. Et j'ai ajouté 2 lignes. L'exécution de votre requête d'origine produit ce résultat, qui est apparemment mal:

whenend 
2:00 
1:00 

Cependant, la requête que je suggère fonctionne sans erreur, et révèle ce qui se passe réellement:

full_date_time 
1899/12/30 02:00:00 
2010/11/06 01:00:00 

Vous pouvez utiliser la fonction TimeValue() pour ignorer le composant date des valeurs Date/Heure. Peut-être que cette requête vous donnerait les résultats que vous vouliez initialement.

SELECT TimeValue(whenend) AS ignore_dates 
FROM tasksetup 
ORDER BY 1 ASC; 

ignore_dates 
1:00:00 AM 
2:00:00 AM 
+0

Je reçois une erreur "trop ​​peu de paramètres attendus 1" lorsque j'exécute cette requête. C'est certainement un peu de temps, pas une date dans la base de données. Le type de données est "Date/Time" mais le format est "Short Time". – Jimmy

+0

Désolé, j'ai oublié d'ajuster la commande par. Voir la révision ci-dessus. – HansUp

+0

Le point est que le format contrôle seulement comment les données sont affichées, pas ce qui est stocké. Un champ Date/Heure inclura ** toujours ** un composant de date (numéro entier). – HansUp

Questions connexes