web-dev-qa-db-fra.com

Convertir la chaîne en date dans la requête MS Access

J'essaie de récupérer des données de ma table access en fonction de la colonne Date. Mon exigence est d'afficher tout ce qui est supérieur à la certaine valeur. J'essaie de cast ma valeur, qui est un string en utilisant Format &CDate fonctionne avec le type de données datetime et se jette en tant que débordement.

Voici la requête:

Select * from Events
Where Events.[Date] > cDate(Format("20130423014854","yyyy-MM-dd hh:mm:ss"))

Exemple de valeur d'enregistrement de date du tableau: 2013-04-23 13:48:54.0

Events.[Date] est un champ de type Date/Heure dans access

Comment puis-je réparer cela ?

11
user2385057

Utilisez la fonction DateValue() pour convertir un type de données string en date. C'est la façon la plus simple de procéder.

DateValue(String Date) 
11
Diego dot net

Dans Access, cliquez sur Create > Module et collez le code suivant

Public Function ConvertMyStringToDateTime(strIn As String) As Date
ConvertMyStringToDateTime = CDate( _
        Mid(strIn, 1, 4) & "-" & Mid(strIn, 5, 2) & "-" & Mid(strIn, 7, 2) & " " & _
        Mid(strIn, 9, 2) & ":" & Mid(strIn, 11, 2) & ":" & Mid(strIn, 13, 2))
End Function

Frappé Ctrl+S et enregistrez le module sous modDateConversion.

Essayez maintenant d'utiliser une requête comme

Select * from Events
Where Events.[Date] > ConvertMyStringToDateTime("20130423014854")

--- Modifier ---

Solution alternative évitant la fonction VBA définie par l'utilisateur:

SELECT * FROM Events
WHERE Format(Events.[Date],'yyyyMMddHhNnSs') > '20130423014854'
5
Gord Thompson

Fondamentalement, cela ne fonctionnera pas

Format("20130423014854","yyyy-MM-dd hh:mm:ss")

la fonction format ne fonctionnera que si votre chaîne a un format correct

Format (#17/04/2004#, "yyyy/mm/dd")

Et vous devez spécifier quel type de données du champ [Date] est, car je ne peux pas mettre cette valeur 2013-04-23 13:48:54.0 sous un champ Date générale (j'utilise MS Access2007). Vous voudrez peut-être afficher ce sujet: sélectionnez la date entre les deux

2
Nexus
cdate(Format([Datum im Format DDMMYYYY],'##/##/####') ) 

convertit la chaîne sans caractères de ponctuation en date

1
accessuser

Si vous devez afficher tous les enregistrements après le 01/09/2014, ajoutez ceci à votre requête:

SELECT * FROM Events
WHERE Format(Events.DATE_TIME,'yyyy-MM-dd hh:mm:ss')  >= Format("2014-09-01 00:00:00","yyyy-MM-dd hh:mm:ss")
0
Jing Lei