2012-06-23 1 views
3

У меня есть следующие данные таблицы
TBL Прием: дата и время два разных поля и хранятся в dd/mm/yyyy форматеПоиск между датой и временем в запросе доступа

AdmitDate   AdmitTime 
1/6/2012   00:00 
3/6/2012   10:00 
3/6/2012   19:00 
4/6/2012   20:38 
5/6/2012   21:00 
7/6/2012   03:00 

Я хотел бы написать запрос чтобы показать все записи между 3/6/2012 07:00:00 и 5/6/2012 06:59:59.

В запросе также должна быть возможность ввода «даты» от пользователя (только дата & может быть фиксированным интервалом между 7:00 первого дня до 6 59 утра второго дня) - например, с использованием ПАРАМЕТРОВ. Я использую access 2003. Я пробовал несколько запросов, но я не умею их совершенствовать - я не получаю точных результатов. Кто-нибудь, пожалуйста, помогите.

Спасибо,

С уважением,

+0

Что такое тип данных 'AdmitDate'? –

+0

AdmitDate: dateTime и AdmitTime: dateTime тоже –

+0

Тогда зачем вам и «AdmitTime»? Почему бы не сохранить оба значения в одном столбце? –

ответ

3

Если есть только один DATETIME столбец, условие запроса будет легко быть построены:

WHERE AdmitDateTime >= '2012-06-03 07:00' 
    AND AdmitDateTime < '2012-06-05 07:00' 

Так как вы можете» это сделать, и поскольку у Access есть свои функции Date and Time, я думаю, что это сработает:

WHERE DateValue(AdmitDate) + AdmitTime 
     >= DateValue([InputDate]) + TimeValue('07:00') 
    AND DateValue(AdmitDate) + AdmitTime 
     < DateValue([InputDate]) + 2 + TimeValue('07:00') 

В DateValue() звонках есть, чтобы гарантировать, что любые временные часть в значении, передаваемый пользователем или в AdmitDate колонки сколов и используются только '07:00' и AdmitTime.

+0

Я пробовал: SELECT * From ADmission Где (((AdmitDate + AdmitTime)> = # 1/6/2012 10: 00 #) И ((AdmitDate + AdmitTime) <= # 3/6/2012 15: 00 #)), но получить странные результаты. –

+0

Работает как шарм !!! Я изменил его на PARAMETERS Start_Date DateTime, End_Date DateTime; ВЫБОР AdmitDate, AdmitTime ОТ Admit_PtLocations ГДЕ DateValue (AdmitDate) + AdmitTime > = DateValue (start_date) + TimeValue ('07: 00 ') И DateValue (AdmitDate) + AdmitTime

+0

Да, теперь имеет смысл. Спасибо за кучу помощи! –

0

Все даты офиса являются номера, так что вы можете добавить:

SELECT [admitdate]+[admittime] AS Expr1 
FROM dt 
WHERE ((([admitdate]+[admittime]) 
    Between #6/3/2012 7:0:0# And #6/5/2012 6:59:59#)); 

выше будет работать в окне конструктора запросов, но в другом месте, например, VBA вы столкнетесь с проблемами языкового стандарта.

Редактировать комментарий повторно

Result 
03/06/2012 10:00:00 
03/06/2012 19:00:00 
04/06/2012 20:38:00 
+0

У меня проблема: вышеупомянутый запрос работает, но дает мне результаты с 5 по 7-е ..... странно !!!!! любые идеи, почему это происходит? я попытался изменить даты и его всегда 2 дня вперед ...... –

+0

MS Access использует американские даты по большей части. Чтобы обеспечить отсутствие двусмысленности, обычно лучше вводить даты в формате yyyy/mm/dd. Что вы набрали? – Fionnuala

+0

Я положил в dd/mm/yy .... хотя я пробовал yyyy/mm/dd ... но я получаю те же результаты (2 дня вперед). –

Смежные вопросы