2009-11-03 13 views
1

J'ai des problèmes pour extraire des enregistrements d'une base de données pour une certaine date. Cette commande cela le SQL que j'ai en ce moment:MS Access SELECT et OERE

SELECT * FROM ict1 WHERE date='26/03/1992' 

Il doit retourner un enregistrement de ma base de données. "date" est une colonne et l'un des enregistrements a '26/03/1992 'comme valeur. J'ai testé la connexion db et je peux utiliser:

SELECT * from ict1 

Alors je sais que ce n'est pas ça. C'est probablement juste la syntaxe SQL qui est très différente, je suis habitué à MySQL: @)

Doit probablement mentionner que j'utilise .NET avec un OleDbConnection.

Merci.

+0

Quel est le type de la colonne de date? Quel est le type de la colonne de date dans la table * dans l'accès *? – Murph

+0

J'ai commenté les deux réponses. – Fionnuala

Répondre

0

Utilisez la date au format AAAA/MM/JJ:

SELECT * FROM ict1 WHERE date='1992/03/26'

SELECT * FROM ict1 WHERE date=#1992/03/26#

+1

Dans Access, le délimiteur de date est un hachage et non un guillemet. – Fionnuala

+0

Dûment noté. Merci. –

4

Habituellement dates doivent être formatées comme pour l'accès comme le

suivant
Select * from ict1 where date= #03/26/1992# 

Le # indique une date dans l'accès. Soyez très prudent avec les dates au format '10/03/1992 'car cela pourrait signifier le 10 mars ou le 3 octobre en fonction de l'endroit où vous vous trouvez.

également # 1992-1903/26 # fonctionne aussi

+0

Il est beaucoup plus sûr d'utiliser aaaa/mm/jj car il est non ambigu, à la fois pour l'accès et l'utilisateur, peu importe où vos paramètres régionaux. – Fionnuala

+0

@Remou - Je aggree. J'ai été pris par le formatage des dates avant. –

+0

Le format ISO interrompt l'accès dans certains contextes (mais pas celui-ci), donc la recommandation habituelle est d'utiliser un format comme "d-mmm-yyyy" ou autre, où le mois est épelé en lettres plutôt qu'en chiffres. Franchement, je pense que c'est une erreur d'utiliser Format() en premier lieu, et au lieu de simplement passer des dates avec DateSerial(), qui ne peut jamais aller mal. Bien sûr, cela ne fonctionne pas via OLEDB, comme dans ce contexte. –

0

Vous voudrez peut-être utiliser une fonction de comparaison de date au lieu de la date = # xxxx/xx/xx #. Les comparaisons de dates ne donnent pas les résultats attendus en raison de problèmes de formatage et de type de données. Dans SQL Server, votre date peut être stockée sous la forme d'un datetime ou d'un type de données de date. Vous devez vous assurer que vous comparez les choses dans le même type et le même format.

DateDiff ("d", # 1992/03/26 #, date) = 0