Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.051 c
15-1169709149
Ega23
2007-01-25 10:12
2007.02.18
Что может выбить систему до BSOD?


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


2-1170331990
PL
2007-02-01 15:13
2007.02.18
Функция для определения предыдущего месяца


1-1167063016
Sam Stone
2006-12-25 19:10
2007.02.18
Уход модальных форм на задний план


1-1166694594
Action
2006-12-21 12:49
2007.02.18
Как сохранить иконку в 32 цветах ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский