2016-12-09 3 views
0

У меня есть следующее выражение в виде таблицы MS-доступа:Больше/Меньше, чем дата/время табличное выражение

IIf([End Date/Time]>="12/8/2016 6:00:00",1,0)

12/08/2016 18:15:00 будет возвращать «1», однако 12/08/2016 14:23:29 возвращает «0»

Я предполагаю, что это проблема с AM/PM. Я попробовал поставить «6:00:00 AM» в своем выражении, но никаких изменений.

Также я хотел бы заменить '12/8/2016 'на «вчера», но date()-1, похоже, не работает.

EDIT: Я понял, что время должно быть '06: 00: 00 '. Это дает правильные даты. До сих пор не знаю, как получить это автоматически (т.е. вчера в 06:00)

Благодаря

ответ

-1

2 вещи. Во-первых, я считаю, что вам нужно преобразовать вашу строку в дату и время. Я думаю, что вы получаете неуловимые результаты, потому что он пытается сравнить их как другой формат. Как строки или цифры. Форматирование как время дат используется формат fucntion:

Format("12/8/2016 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm") 

Во-вторых, чтобы добавить дату нужно функцию DateAdd.

DATEADD('d',-1,"12/8/2016 6:00:00AM") 

'd' определяет -1 как добавленный «день».

Таким образом, положить все это вместе:

DATEADD("d",-1,Format("12/8/2016 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm")) 

И, наконец, если вы хотите хотите прокатном вчера, а не постоянно 12/7/2016 (так как вы бы просто использовать эту дату, если она была случай), вам нужно, чтобы получить текущую дату с помощью этой функции:

Date() 

Так, бросая это в нашу смесь мы получаем:

DATEADD("d",-1,Format(DATE() & " 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm")) 
+0

Спасибо, что не позволит мне использовать функцию DATEADD в выражении но я должен быть в состоянии сделать это в VBA. –

+1

У вас эта проблема. _Format_ делает то, что подразумевает его название, форматирует значение даты. Таким образом, он всегда возвращает строку, а не значение даты.Итак, в формате «Формат (« 12/8/2016 6:00:00 AM »,« mm/dd/yyyy hh: nn: ss am/pm »)' '" 12/8/2016 6:00:00 AM "' сначала сбрасывается на значение даты с использованием ваших настроек в Windows, а затем 'Format' возвращает форматированную строку, которая снова выставляется до значения даты до того, как' DateAdd' сможет ее обработать. Довольно запутанный. – Gustav

+0

@ Густов. Вы правы. Мой ответ был слишком сложным, но это сработало, поэтому я просто с ним катался. Спасибо за объяснение. +1 за ваш ответ. – Chance

2

Ваша проблема в том, что вы угрожаете датам как строки. Использовать дата всегда, без исключений.

Кроме того, если ваше поле не является значением даты, его необходимо преобразовать.

Таким образом, это будет работать:

IIf(DateValue([End Date/Time]) >= #2016/12/8 6:00:00#, 1, 0) 

и это:

IIf(DateValue([End Date/Time]) >= Date() - 1, 1, 0) 

и это:

IIf(DateValue([End Date/Time]) >= DateAdd("d", -1, #2016/12/8 6:00:00#), 1, 0) 
Смежные вопросы