2013-06-28 9 views
6

ja tyring do pobierania danych z moim stole dostępu w oparciu o datę kolumnie wymogiem jest, aby wyświetlić wszystko większe niż pewna wartośćKonwersja String dotychczas w MS Query dostępu

próbuję rzucić moją wartość, która jest ciągiem przy użyciu funkcji formatowania & CDate z typem daty, wyrzuca jako przepełnienie.

Oto zapytanie:

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

Sample Data Record wartość z tabeli: 23.04.2013 13: 48:. 54,0

wydarzenia [Data] jest data/czas w polu typ dostępu

Jak mogę to naprawić?

+0

proszę [edytuj] (http://stackoverflow.com/posts/17361338/edit) Zapytanie do wyjaśnienia. Czy 'wydarzenia [Data]' 'Pole A Data/Pole czasu lub pole "Tekst"? –

+0

Zrobione! .. to jest pole Data/Czas – user2385057

+0

OK, dobrze. Czy próbowałeś już użyć 'Where Events. [Data]> # 2013-04-23 01: 48: 54 #"? –

Odpowiedz

1

Zasadniczo, to nie będzie działać z

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

funkcja Format będzie działać tylko wtedy, gdy ciąg mieć poprawny format

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

I trzeba powiedzieć, co typ danych pola [Date] jest ? bo nie mogę umieścić tej wartości 2013-04-23 13: 48: 54.0 pod polem Data Genearal (używam MS access2007 btw). Może chcesz oglądać tego tematu select date in between

+0

Data jest polem typu data/czas skonfigurowanym w bazie danych – user2385057

3

W programie Access, kliknij Create > Module i wklej poniższy kod

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 

Hit Ctrl + S i zapisz moduł jako modDateConversion.

Teraz spróbuj użyć kwerendy jak

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

--- Edit ---

Alternatywne rozwiązanie unikając zdefiniowana przez użytkownika funkcja VBA:

SELECT * FROM Events 
WHERE Format(Events.[Date],'yyyyMMddHhNnSs') > '20130423014854' 
+0

działa z podobnym zachowaniem, jak wspomniałem wcześniej pokazuje wszystkie rekordy nawet z znacznikiem czasu mniejszym niż powyżej wartości, ale z tej samej daty .. również szukam bardziej bezpośredniego sposobu realizacji, ponieważ byłoby to zbudowany w kodzie Java .. więc nie może pracować z tą funkcją, ponieważ mogę mieć teraz dostęp zainstalowany na serwerze docelowym – user2385057

+0

@ user2385057 RE: nie używając VBA - zaktualizowałem swoją odpowiedź. –

+0

+1 Uwielbiam prostotę aktualizacji, aby przekonwertować pole daty w celu porównania. –

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

konwertuje ciąg bez znaki interpunkcyjne do datowania

0

Jeśli chcesz wyświetlić wszystkie rekordy po 2014-09-01, dodać do zapytania:

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") 
4

Użyj funkcji DATEVALUE przekonwertować ciąg na bieżąco. To najprostszy sposób robienia tego.

DateValue (String data)

+0

Byłoby miło podzielić się przykładem –