Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Формат даты в SQL запросе


Draught ©   (2006-11-28 03:56:00) 

Есть таблица, в которой поле типа Дата, при простой выборке всех записей из таблицы видно, что дата передается как:
2006-11-23 00:00:00.0
2006-11-23 00:00:00.0
2006-11-24 00:00:00.0
2006-11-27 19:09:28.0
2006-11-27 19:09:28.0
2006-11-27 19:09:28.0

т.е. как YYYY-MM-DD HH:MM:SS
но если мы желаем сделать выборку за период, т.е. что-то вроде
select * from table1 where Table1.Date between 2006-11-20 and 2006-11-25получаем 0 результатов... причина проста, дату требуется передавать в формате Access, дата представлена в виде обычного числа, т.е. 24.11.2006=39045.

Следующий запрос позволяет делать выборку за период с 23 по 24.11.2006
select * from Table1
Where (Table1.Data between 39043 and 39045)


Вопрос: как передавать в запросе дату не конвертируя ее в число?

СУБД - MS Access
Delphi - BDS 2006


sniknik   (2006-11-28 18:02:00) [1]

LifeTime   (28.11.06 16:55) [12]
см. [0]
> СУБД - MS Access

и зачем конвертация в дельфи а после назад в sql сервере? параметры правильнее, было число, передали число и используется число. без всяких лишних операций.


LifeTime   (2006-11-28 16:55:00) [2]

А что? Вот так:
  CONVERT(DATETIME,'2006-10-02 00:00:00:000',102)
не помогает???


Anatoly Podgoretsky   (2006-11-28 08:47:00) [3]

> ЮЮ  (28.11.2006 05:29:09)  [9]

А экспериментируй, не экспериментируй, но против интелекта не попрешь.


Anatoly Podgoretsky   (2006-11-28 08:46:00) [4]

> Draught  (28.11.2006 04:51:07)  [7]

> я запросы строю в Aqua Data Studio

Выбрось это и больше никогда не пользуйся


ЮЮ   (2006-11-28 05:29:00) [5]


> апросы строю в Aqua Data Studio,

тогда символьное представление обрамляется символрм #, а не кавычками, а вот где nn mm и yy и какой символ разделителя - точно не знаю - эксперементируй.


Draught   (2006-11-28 04:51:00) [6]

Все... разобрался...

Дату передаю через параметры ADOQuery, собсна использую DateFrom и DateTo - заработало :)

А что касается этих самых чисел - я запросы строю в Aqua Data Studio, так вот если там дату передавать как это самое число (см запрос в вопросе), то все работает...


Draught   (2006-11-28 04:51:00) [7]

Спасиб за помощь :)


ЮЮ   (2006-11-28 04:42:00) [8]

откуда у тебя в программе берутся эти числа в более привычном виде?


ЮЮ   (2006-11-28 04:40:00) [9]

2006-11-22 - дата
22.11.2006 - тоже дата

врешь. попробуй второй вариант всунуть в свой запрос - огребешь ошибку синтаксиса.

а вот
'2006-11-22' и '22.11.2006' и '#22.11.2006#', '20061122' - символьные представления двты, которые могут быть, а могут и нет, переведены во внутреннее значение - 39044.

А перевод - дело тонкое.
01.03.06 можно интерпретировать и как 1 марта и как 3 января.

Это параметры. Присваиваются перед открытием запроса.

Какой комонет использутся для выполнения запроса?


Draught   (2006-11-28 04:27:00) [10]

так...

2006-11-22 - дата
22.11.2006 - тоже дата
а вот 39044 - число, точнее это тоже дата, только ее еще посчитать нужно

меня интересует вопрос, как избавиться от этого вот числа и передавать дату в более привычном виде?


ЮЮ   (2006-11-28 04:21:00) [11]

а 2006-11-20 в твоем результате вычисляется как принято везде:
 2006 <минус> 11 <минус> 20
а записав 20/11/2006 получишь 20 <разделить на> 11 <разделить на> 2006
:)

Cимвольное представление даты следует брать в кавычки, на то оно и символьное


Draught   (2006-11-28 04:21:00) [12]

так, а где описываются переменные DateFrom и DateTo?


ЮЮ   (2006-11-28 04:17:00) [13]

поле типа Дата, при простой выборке всех записей из таблицы видно, что дата передается как:
Ключевое поле - видно. Это она так отображается. Причем способ отображения можно менять и настраивать. А хранится дата, как количество дней от некой даты, т.е. числом.

Чтобы не заморачиватться с символьным форматом представления дат, разным для разных БД, следует используй параметрический запрос:

select * from table1 where Table1.Date between :DateFrom and :DateTo

где параметры типа TDateTime


Наверх

Титульная страница Поиск, карта сайта Написать письмо