2009-10-02 7 views
2

Si j'ai un champ Date/Heure dans Access et que j'ai besoin de trouver toutes les entrées qui sont dans une année spécifique ... disons 2009. Si mes champs sont définis comme MM/JJ/AAAA, comment pourrais-je faire une requête pour faire essentiellement //2009Requête dans SQL qui autorise le caractère générique mois/jour mais année spécifique

mise à jour Merci pour l'aide tout le monde, mais je suppose que la question est que je suis une sorte de construction dynamique mon instruction SQL dans ASP. Où la chaîne finit par renvoyer une chaîne que j'ai construite 'JJ/MM/AAAA'. Si l'utilisateur n'introduit rien dans l'un des 3 champs, je devrai faire une requête spécifique où cette partie est un joker ... comme s'ils ne sont pas mis dans un jour, j'ai besoin d'un

"SELECT * FROM database WHERE (datecolumn LIKE "*/MM/YY")" 

.... qui ne fonctionne pas dans Microsoft Access

Répondre

5

que diriez-vous

WHERE MyDate >= '1/1/2009' AND MyDate < '1/1/2010' 
+0

... ET MyDate <1/1/2010 ou vous perdez le 31e – Paul

+0

@Paul - bien que techniquement correct, le vôtre est une bonne pratique. Je fais l'hypothèse dangereuse que les heures: minutes: secondes contiendront toutes des zéros. Ma réponse a été modifiée en conséquence. –

+1

+1 parce que (au moins dans Sybase) utilisant year() ou toute autre fonction sur un champ de la clause where empêchera l'utilisation de l'index correct sur ce champ. – DVK

-1

OTTOMH

SELECT * FROM Table WHERE DatePart ("yyyy", YourDatetimeColumn) = 2009 
+0

Ceci est une mauvaise réponse car tout d'abord, il ne sera pas utiliser les index, et deuxièmement, il n'est pas database- agnostique de moteur. –

+0

Index - vous avez raison. DB agnostique de moteur - LOL! la question spécifie "dans ACCESS" - il doit utiliser des requêtes spécifiques à Access! –

3

Vous s Hould pouvoir utiliser la fonction Year()

Quelques exemples:

Year (#05/05/1985#)  returns 1985 
Year (#17/07/2005#)  returns 2005 

Si votre champ est appelé « myDate » par exemple, vous pouvez construire une requête pour tout sélectionner l'année 2009 comme ceci:

SELECT * FROM myTable WHERE Year(myDate) = 2009 

Cette fonction est également disponible dans MS Access et SQL Server (si cela vous intéresse).

Quelques liens pour plus d'informations:

Access: Year Function
Year Function
YEAR (Transact-SQL)

+0

@Bob - La question initiale mentionne Access, que je suppose être Microsoft Access. (c'est-à-dire "Si j'ai un champ Date/Heure dans Access")! – CraigTP

+0

Ceci est une mauvaise réponse car tout d'abord, il n'utilisera pas d'index, et en second lieu ce n'est pas agnostique du moteur de base de données. –

+0

@David - L'agnosticisme des bases de données est totalement hors de propos puisque la question initiale indique clairement l'utilisation de MS Access. Bien que vous ayez raison sur le fait que la fonction Year() n'utilise pas d'index, cela peut être un problème ou non car l'auteur de la question n'a pas clarifié l'étendue des données qu'il interroge. Par exemple, cette requête avec "wildcard day/month" ne sera peut-être exécutée que sur une table de <100 lignes. Tout en utilisant un index aidera, il n'est certainement pas nécessaire dans ce cas. Aussi, puisque la plate-forme est MS Access, je pense que nous pouvons supposer que la performance n'est pas une priorité. – CraigTP

0
WHERE Year(DateColumn) = 2009 
+0

Ceci est une mauvaise réponse car tout d'abord, il n'utilisera pas d'index, et en second lieu ce n'est pas agnostique du moteur de base de données. –

+0

@David: Je ne pensais pas beaucoup à la partie index et l'OP le veut pour MS-Access. Pas sûr de ce qui vous fait penser à la question pour le mode agnostique de base de données? – shahkalpesh

+0

@David: Aussi, j'aurais aimé, si vous auriez répondu au lieu de voter en bas de la réponse de tout le monde. Où le PO parle-t-il de la performance? – shahkalpesh

Questions connexes