Обьясните на пальцах про выборку по типу DateTime

Простоинтересующийся
Дата: 09.11.2009 10:41:00
Есть поле Dt с типом Date/Time в котором сохраняется значение текущего момента времени
dd.mm.yyyy hh:mm:ss
01.02.2009 23:25:01 (Для примера)
Фак читал, но есть вопросы, почему форматным символом для обозначения минут в факе является nn, а в хелпе mm?
Кроме того, как корректно отобрать из данного поля записи за день?
Вариант первый:
Конвертировать в строку
WHERE  Format(Dt,'dd.mm.yyyy')='01.02.2009'
Но наверное некорректно!Но вариант рабочий!
Вариант второй, указать диапазон
WHERE Dte Between '#' & Format(Cdate('01.02.2009 00:00:00'),'mm\/dd\/yyyy hh:nn:ss') & '#' AND '#' & Format(Cdate('01.02.2009 23:59:59'),'mm\/dd\/yyyy hh:nn:ss') & '#'
Вроде бы вариант корректный но не работает, подскажите почему? Может просто надо отформатировать поле: Format(Dte,'mm\/dd\/yyyy hh:nn:ss')?
Вариант третий, работать все же не с текстом, а с датой:
WHERE Cdate(Format(Dte,'dd.mm.yyyy'))='#' & Format(Cdate('01.02.2009'),'mm\/dd\/yyyy') & '#'
Вроде бы вариант корректный но не работает, подскажите почему?
Я так понимаю в поле DateTime сохраняется полное значение даты и времени, даже если например при инсерте время не указывается, то записывается 00:00:00 - полночь, то есть например мы записали 01.01.2009, а реально хранится 01.01.2009 00:00:00?
olga zobkov
Дата: 09.11.2009 10:45:39
Простоинтересующийся,

мне кажется и первый вариант нормально, но может быть в следующих вместо # поставить ' и тогда заработает? хотя если речь идет о сравнении дат, то я пользуюсь datediff -работает всегда!
Rivkin Dmitry
Дата: 09.11.2009 10:46:25
Как вариант:

WHERE DateValue(Dte) = Date
ё
Дата: 09.11.2009 11:02:14
..вот это, в 1 и 2
'#' & ...
в результате дает строку

если поле Dte - с типом Date/Time
то достаточно так
WHERE Dte=Cdate('01.02.2009')
Простоинтересующийся
Дата: 09.11.2009 11:03:30
olga zobkov
мне кажется и первый вариант нормально

Мне так тоже кажется, но все же гложет сомненье, что это не изящно.
ё
Дата: 09.11.2009 11:04:43
ё
..вот это, в 1 и 2
...

в 2, 3
Простоинтересующийся
Дата: 09.11.2009 11:13:42
Я никак не могу понять, с этим различием в неявной конвертации Access перед передачей Jet.
В хелпе говорится, что в редакторе запросов, для указания выборки по полю Date-Time надо использовать символ решетки, напрмер так #01.01.2009#, странно как эта конструкция вообще работает, получается что это #01.01.2009#, как это '01.01.2009', но решетки указывают jet указывается тип данных Date/Time.
Jet воспринимает дату только в американском формате, а именно mm/dd/yyyy, то есть мы форматируем только значение предиката в этом фомате, dte=Format(Cdate('01.01.2009','mm\/dd\/yyyy')).
Кстати, а что означает это символ при форматировании "\"?
Простоинтересующийся
Дата: 09.11.2009 11:18:03
ё,
Нет это вариант работает, если только в поле сохраняется только дата, а значение времени - полночь
DateOpt=Cdate('09.11.2009 11:17:00') - вот это вариант работает, но надо именно диапазон!
ё
Дата: 09.11.2009 11:20:36
Простоинтересующийся
...
Jet воспринимает дату только в американском формате, а именно mm/dd/yyyy, ...

совершенно верно
вот Cdate - с этим справляется само
Простоинтересующийся
...
Кстати, а что означает это символ при форматировании "\"?


следующий за "\" символ - символьная константа
Простоинтересующийся
Дата: 09.11.2009 11:22:57
ё
если поле Dte - с типом Date/Time
то достаточно так
WHERE Dte=Cdate('01.02.2009')

Достаточно так:
WHERE Format(Dte,'dd.mm.yyyy')=Cdate('01.02.2009')
Тогда работает, но я не наблюдаю в этом примере #, потому что мы сравниваем результат выполнения функции Format(), которая возвращает текстовое значение с значением Date/Time...
Думаю, что такой вариант проще:
Format(Dte,'dd.mm.yyyy')='01.02.2009'
, но получается опять конвертирование в строку!