Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: 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 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.074 c
3-1164873599
Литейщик
2006-11-30 10:59
2007.02.18
Подчиненные табличные формы в стиле Acсess


3-1164260869
ValexWeb
2006-11-23 08:47
2007.02.18
Как с помощью компоненты TABLE узнать номер текущей отображаемой


15-1169582407
SkySpeed
2007-01-23 23:00
2007.02.18
Эт чё, каждому пользователю MAIL.RU - ящик по 5 гиг? %)


2-1170177129
Garacio
2007-01-30 20:12
2007.02.18
Поиск даты и слова в txt


2-1170397335
Extar
2007-02-02 09:22
2007.02.18
Системная ошибка под 1sp WinXP