Запрос между датами в MS Access
От: Аноним  
Дата: 21.09.06 04:46
Оценка:
Пишу на дельфях, к базе 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#


не помогает... в чем может быть дело?
Re: Запрос между датами в MS Access
От: pkarklin  
Дата: 21.09.06 04:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пишу на дельфях, к базе 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:

SELECT *

FROM Orders

WHERE ShippedDate = DateValue('5/10/96');


And use this code for the United Kingdom:

SELECT *

FROM Orders

WHERE ShippedDate = DateValue('10/5/96');
Re: Запрос между датами в MS Access
От: Binpol  
Дата: 21.09.06 19:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пишу на дельфях, к базе 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] = Now()
Re[3]: Запрос между датами в MS Access
От: shelkovnikov Россия  
Дата: 22.09.06 03:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Теперь остался еще один вопрос:

А>Как вытащить данные только за текущую дату?

А>Почему эта констукция не работает?

А>
А>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
Re[3]: Запрос между датами в MS Access
От: webinc  
Дата: 22.09.06 04:04
Оценка: +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 минуту второго ночи... (на сколько я понимаю в скл)...
Re[5]: Запрос между датами в MS Access
От: webinc  
Дата: 22.09.06 05:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Так у меня в базе формат колонки — полная дата (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")


что еще за фокусы...?
Re[7]: Запрос между датами в MS Access
От: webinc  
Дата: 24.09.06 21:52
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Ну вообще приехали...

А>в базе есть дата 20.09.2006 22:11:17
А>и даже запрос такого типа не работает

А>
А>select * from MainTable where [Date] = DateValue("20/09/2006 22:11:17")
А>


А>что еще за фокусы...?

Посмотри описание функции DateValue Может она только дату возвращает
Попробуй переписать так

select * from MainTable where DateValue([Date]) = DateValue("20/09/2006")
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Запрос между датами в MS Access
От: shelkovnikov Россия  
Дата: 25.09.06 07:07
Оценка:
Здравствуйте, 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())? так описанные выше проблемы снимутся.
Re[9]: Запрос между датами в MS Access
От: webinc  
Дата: 25.09.06 21:44
Оценка:
Здравствуйте, 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)

должен сработать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.