Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизФормат даты в SQL запросе Найти похожие ветки
← →
Draught (2006-11-28 03:56) [0]Есть таблица, в которой поле типа Дата, при простой выборке всех записей из таблицы видно, что дата передается как:
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.2006select * from Table1
Where (Table1.Data between 39043 and 39045)
Вопрос: как передавать в запросе дату не конвертируя ее в число?
СУБД - MS Access
Delphi - BDS 2006
← →
ЮЮ © (2006-11-28 04:17) [1]поле типа Дата, при простой выборке всех записей из таблицы видно, что дата передается как:
Ключевое поле - видно. Это она так отображается. Причем способ отображения можно менять и настраивать. А хранится дата, как количество дней от некой даты, т.е. числом.
Чтобы не заморачиватться с символьным форматом представления дат, разным для разных БД, следует используй параметрический запрос:
select * from table1 where Table1.Date between :DateFrom and :DateTo
где параметры типа TDateTime
← →
ЮЮ © (2006-11-28 04:21) [2]а 2006-11-20 в твоем результате вычисляется как принято везде:
2006 <минус> 11 <минус> 20
а записав 20/11/2006 получишь 20 <разделить на> 11 <разделить на> 2006
:)
Cимвольное представление даты следует брать в кавычки, на то оно и символьное
← →
Draught (2006-11-28 04:21) [3]так, а где описываются переменные DateFrom и DateTo?
← →
Draught (2006-11-28 04:27) [4]так...
2006-11-22 - дата
22.11.2006 - тоже дата
а вот 39044 - число, точнее это тоже дата, только ее еще посчитать нужно
меня интересует вопрос, как избавиться от этого вот числа и передавать дату в более привычном виде?
← →
ЮЮ © (2006-11-28 04:40) [5]2006-11-22 - дата
22.11.2006 - тоже дата
врешь. попробуй второй вариант всунуть в свой запрос - огребешь ошибку синтаксиса.
а вот
"2006-11-22" и "22.11.2006" и "#22.11.2006#", "20061122" - символьные представления двты, которые могут быть, а могут и нет, переведены во внутреннее значение - 39044.
А перевод - дело тонкое.
01.03.06 можно интерпретировать и как 1 марта и как 3 января.
Это параметры. Присваиваются перед открытием запроса.
Какой комонет использутся для выполнения запроса?
← →
ЮЮ © (2006-11-28 04:42) [6]откуда у тебя в программе берутся эти числа в более привычном виде?
← →
Draught (2006-11-28 04:51) [7]Все... разобрался...
Дату передаю через параметры ADOQuery, собсна использую DateFrom и DateTo - заработало :)
А что касается этих самых чисел - я запросы строю в Aqua Data Studio, так вот если там дату передавать как это самое число (см запрос в вопросе), то все работает...
← →
Draught (2006-11-28 04:51) [8]Спасиб за помощь :)
← →
ЮЮ © (2006-11-28 05:29) [9]
> апросы строю в Aqua Data Studio,
тогда символьное представление обрамляется символрм #, а не кавычками, а вот где nn mm и yy и какой символ разделителя - точно не знаю - эксперементируй.
← →
Anatoly Podgoretsky © (2006-11-28 08:46) [10]> Draught (28.11.2006 04:51:07) [7]
> я запросы строю в Aqua Data Studio
Выбрось это и больше никогда не пользуйся
← →
Anatoly Podgoretsky © (2006-11-28 08:47) [11]> ЮЮ (28.11.2006 05:29:09) [9]
А экспериментируй, не экспериментируй, но против интелекта не попрешь.
← →
LifeTime (2006-11-28 16:55) [12]А что? Вот так:
CONVERT(DATETIME,"2006-10-02 00:00:00:000",102)
не помогает???
← →
sniknik © (2006-11-28 18:02) [13]LifeTime (28.11.06 16:55) [12]
см. [0]
> СУБД - MS Access
и зачем конвертация в дельфи а после назад в sql сервере? параметры правильнее, было число, передали число и используется число. без всяких лишних операций.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c