Здравствуйте, Аноним, Вы писали:
А>Пишу на дельфях, к базе MS Access подключаюсь через ADO А>Не могу правильно написать запрос....
А>
А>select * from MainTable where [date] between 12.09.2006 00:00:00 and 12.09.2006 23:59:59
А>
А>формат таблицы колонки [date] такой же (полный формат)
А>почему всегда выходит ошибка синтаксиса?
А>пробывал и так А>
А>select * from MainTable where [date] between #12.09.2006 00:00:00# and #12.09.2006 23:59:59#
А>
А>не помогает... в чем может быть дело?
When you specify the criteria argument, date literals must be in U.S. format, even if you are not using the U.S. version of the Microsoft® Jet database engine. For example, May 10, 1996, is written 10/5/96 in the United Kingdom and 5/10/96 in the United States. Be sure to enclose your date literals with the number sign (#) as shown in the following examples.
To find records dated May 10, 1996 in a United Kingdom database, you must use the following SQL statement:
SELECT *
FROM Orders
WHERE ShippedDate = #5/10/96#;
You can also use the DateValue function which is aware of the international settings established by Microsoft Windows®. For example, use this code for the United States:
Здравствуйте, Аноним, Вы писали:
А>Пишу на дельфях, к базе MS Access подключаюсь через ADO А>Не могу правильно написать запрос....
А>
А>select * from MainTable where [date] between 12.09.2006 00:00:00 and 12.09.2006 23:59:59
А>
А>формат таблицы колонки [date] такой же (полный формат)
А>почему всегда выходит ошибка синтаксиса?
А>пробывал и так А>
А>select * from MainTable where [date] between #12.09.2006 00:00:00# and #12.09.2006 23:59:59#
А>
А>не помогает... в чем может быть дело?
А вот так
select * from MainTable where date>#12.09.2006 00:00:00# and date<=#12.09.2006 23:59:59#;
а если запрос к SQLсерверу, то
select * from MainTable where date>'12.09.2006 00:00:00' and date<='12.09.2006 23:59:59';
Re[2]: Запрос между датами в MS Access
От:
Аноним
Дата:
22.09.06 03:41
Оценка:
Здравствуйте, pkarklin, Вы писали:
P>Здравствуйте, Аноним, Вы писали:
А>>Пишу на дельфях, к базе MS Access подключаюсь через ADO А>>Не могу правильно написать запрос....
А>>
А>>select * from MainTable where [date] between 12.09.2006 00:00:00 and 12.09.2006 23:59:59
А>>
[skip]
Спасибо. Помогло DefaultValue — это Акцесовкий транслятор даты... туда можно писать как:
select * from MainTable where [date] between DefaultValue("12/09/2006") and DefaultValue("20/09/2006")
так и
select * from MainTable where [date] between DefaultValue("12.09.2006") and DefaultValue("20.09.2006")
Теперь остался еще один вопрос:
Как вытащить данные только за текущую дату?
Почему эта констукция не работает?
select * from MainTable where [date] = DefaultValue("12.09.2006")
работает только так
select * from MainTable where [date] between DefaultValue("12.09.2006") and DefaultValue("13.09.2006")
Вытащит все данные за 12 число....
На сколько я понимаю Now() в мс Акцес возаращает полную дату т.е. и время тоже?
потому что это тоже не работает:
Здравствуйте, Аноним, Вы писали:
А>Теперь остался еще один вопрос: А>Как вытащить данные только за текущую дату?
А>Почему эта констукция не работает? А>
А>select * from MainTable where [date] = DefaultValue("12.09.2006")
А>
А>работает только так
А>
А>select * from MainTable where [date] between DefaultValue("12.09.2006") and DefaultValue("13.09.2006")
А>
А>Вытащит все данные за 12 число....
А>На сколько я понимаю Now() в мс Акцес возаращает полную дату т.е. и время тоже? А>потому что это тоже не работает:
А>
А>select * from MainTable where [date] = Now()
А>
можно попробовать (не очень производительный вариант) datediff(day, [date], now) between 0 and 1
Здравствуйте, <Аноним>, Вы писали:
А>Теперь остался еще один вопрос: А>Как вытащить данные только за текущую дату?
А>Почему эта констукция не работает? А>
А>select * from MainTable where [date] = DefaultValue("12.09.2006")
А>
А>работает только так
А>
А>select * from MainTable where [date] between DefaultValue("12.09.2006") and DefaultValue("13.09.2006")
А>
А>Вытащит все данные за 12 число....
А>На сколько я понимаю Now() в мс Акцес возаращает полную дату т.е. и время тоже? А>потому что это тоже не работает:
А>
А>select * from MainTable where [date] = Now()
А>
Может потому что '12.09.2006' != '12.09.2006 01:01:01' (к примеру)
По крайней мере на MS SQL так.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Запрос между датами в MS Access
От:
Аноним
Дата:
22.09.06 05:00
Оценка:
Здравствуйте, webinc, Вы писали:
W>Здравствуйте, <Аноним>, Вы писали:
А>>Теперь остался еще один вопрос: А>>Как вытащить данные только за текущую дату?
А>>Почему эта констукция не работает? А>>
А>>select * from MainTable where [date] = DefaultValue("12.09.2006")
А>>
А>>работает только так
А>>
А>>select * from MainTable where [date] between DefaultValue("12.09.2006") and DefaultValue("13.09.2006")
А>>
А>>Вытащит все данные за 12 число....
А>>На сколько я понимаю Now() в мс Акцес возаращает полную дату т.е. и время тоже? А>>потому что это тоже не работает:
А>>
А>>select * from MainTable where [date] = Now()
А>>
W>Может потому что '12.09.2006' != '12.09.2006 01:01:01' (к примеру) W>По крайней мере на MS SQL так.
Так у меня в базе формат колонки — полная дата (dd.mm.yyyy 00:00:00)
т.е. мне нужно вытащить все данные за сегодня....
а по вашему примеру я вытащу только те, которые внесены в 1 минуту второго ночи... (на сколько я понимаю в скл)...
Здравствуйте, <Аноним>, Вы писали:
А>Так у меня в базе формат колонки — полная дата (dd.mm.yyyy 00:00:00) А>т.е. мне нужно вытащить все данные за сегодня.... А>а по вашему примеру я вытащу только те, которые внесены в 1 минуту второго ночи... (на сколько я понимаю в скл)...
Я имею ввиду, глянь какие значения реально стоят в таблице, если там время не равно "00:00:00" то тогда понятно почему не равно т.к.
12.09.2006 = '12.09.2006 00:00:00' и только.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Запрос между датами в MS Access
От:
Аноним
Дата:
22.09.06 16:52
Оценка:
Здравствуйте, webinc, Вы писали:
W>Здравствуйте, <Аноним>, Вы писали:
А>>Так у меня в базе формат колонки — полная дата (dd.mm.yyyy 00:00:00) А>>т.е. мне нужно вытащить все данные за сегодня.... А>>а по вашему примеру я вытащу только те, которые внесены в 1 минуту второго ночи... (на сколько я понимаю в скл)... W>Я имею ввиду, глянь какие значения реально стоят в таблице, если там время не равно "00:00:00" то тогда понятно почему не равно т.к. W>12.09.2006 = '12.09.2006 00:00:00' и только.
В базе стоят значения
19.09.2006 12:00:00
20.09.2006 22:11:17
21.09.2006 12:00:00
Делаю запрос так:
select * from MainTable where [Date] >= DateValue("20/9/2006") AND [Date] <= DateValue("20/9/2006 23:59:59")
Не помогает!
Как быть?
Вопрос остается открытым... не ужели это так трудно в мс Акцесс?
Re[6]: Запрос между датами в MS Access
От:
Аноним
Дата:
22.09.06 17:14
Оценка:
Здравствуйте, webinc, Вы писали:
W>Здравствуйте, <Аноним>, Вы писали:
А>>Так у меня в базе формат колонки — полная дата (dd.mm.yyyy 00:00:00) А>>т.е. мне нужно вытащить все данные за сегодня.... А>>а по вашему примеру я вытащу только те, которые внесены в 1 минуту второго ночи... (на сколько я понимаю в скл)... W>Я имею ввиду, глянь какие значения реально стоят в таблице, если там время не равно "00:00:00" то тогда понятно почему не равно т.к. W>12.09.2006 = '12.09.2006 00:00:00' и только.
Ну вообще приехали...
в базе есть дата 20.09.2006 22:11:17
и даже запрос такого типа не работает
select * from MainTable where [Date] = DateValue("20/09/2006 22:11:17")
Здравствуйте, webinc, Вы писали:
W>Здравствуйте, <Аноним>, Вы писали:
А>>Ну вообще приехали... А>>в базе есть дата 20.09.2006 22:11:17 А>>и даже запрос такого типа не работает
А>>
А>>select * from MainTable where [Date] = DateValue("20/09/2006 22:11:17")
А>>
А>>что еще за фокусы...? W>Посмотри описание функции DateValue Может она только дату возвращает W>Попробуй переписать так
W>
W>select * from MainTable where DateValue([Date]) = DateValue("20/09/2006")
W>
только сканирование таблицы (индекса) получится
может добавить в таблицу отдельное поле с дефолтом DateValue(Now())? так описанные выше проблемы снимутся.
Здравствуйте, shelkovnikov, Вы писали:
S>только сканирование таблицы (индекса) получится
+1 S>может добавить в таблицу отдельное поле с дефолтом DateValue(Now())? так описанные выше проблемы снимутся.
не думаю что оно стоит того.
Я на Акцесе не программировал, но подозреваю что DateValue возвращает только дату, цель попытки было выяснить так ли это. Ну а дальше просто использовать правильную функцию преобразования (т.е. что бы возвращала Дату + Время). Тогда и запрос
select * from MainTable where [date] between ДатаВремя(12/09/2006 00:00:00) and ДатаВремя(12.09.2006 23:59:59)