Преобразование строки в Date в запросе на доступ к MS Access

Я пытаюсь получить данные из моей таблицы access на основе столбца Date. Мое требование - отображать все, что больше определенного значения. Я пытаюсь cast использовать мое значение, которое представляет собой string с использованием функции Format &CDate с типом данных datetime, и оно выбрасывается как переполнение.

Здесь запрос:

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

Пример значения записи даты из таблицы: 2013-04-23 13:48:54.0

Events.[Date] - это поле типа Дата/Время в access

Как я могу это исправить?

Ответ 1

Используйте функцию DateValue() для преобразования типа данных string в date. Это самый простой способ сделать это.

DateValue(String Date) 

Ответ 2

В Access нажмите Create > Module и вставьте следующий код

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

Нажмите Ctrl + S и сохраните модуль как modDateConversion.

Теперь попробуйте использовать запрос типа

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

--- Редактировать ---

Альтернативное решение, исключающее пользовательскую функцию VBA:

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

Ответ 3

В принципе, это не сработает

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

функция format будет работать, только если ваша строка имеет правильный формат

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

И вам нужно указать, какой тип данных поля [Date], потому что я не могу поместить это значение 2013-04-23 13:48:54.0 в поле General Date (я использую MS access2007). Вы можете посмотреть эту тему: выберите дату между

Ответ 4

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

преобразует строку без знаков препинания в дату

Ответ 5

Если вам нужно отобразить все записи после 2014-09-01, добавьте это в свой запрос:

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