Вниз
Скачать: CL | DM;

Формат даты в 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.2006
select * 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.029 c
3-1164567203
SyncMaster795DF
2006-11-26 21:53
2007.02.18
Условия в хранимой процедуре


15-1169614078
Elen
2007-01-24 07:47
2007.02.18
Вопросы о Жестких дисках


15-1170099278
vasIzmax
2007-01-29 22:34
2007.02.18
Ну, на конец-то...


15-1169431613
SerJaNT
2007-01-22 05:06
2007.02.18
Вопросы по Wi-Fi


2-1170067134
asq
2007-01-29 13:38
2007.02.18
_QSQL488.DBF




   Наверх