Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Как сделать фильтрацию по дате   Найти похожие ветки 

 
Riva4   (2006-02-27 17:23) [0]

Есть база с полем Дата есно в формате DateTime и есть DataTimePicker. Как сделать выборку по дате через DataTimePicker?


 
stone ©   (2006-02-27 17:24) [1]

Обычным запросом с параметром, значение которого будет из DataTimePicker


 
Riva4   (2006-02-27 17:37) [2]

Да это я ужо делал , тока он ничего не выбирает :(


 
stone ©   (2006-02-27 17:39) [3]

Какая СУБД?
Покажи что уже делал.


 
Riva4   (2006-02-27 17:42) [4]

Забыл добавить база MSSQL
запрос такого вида

tblIndustry.SQL.Add("SELECT *");
tblIndustry.SQL.Add("FROM books");
tblIndustry.SQL.Add("WHERE DateTime LIKE :Str2");
tblIndustry.Parameters.ParamByName(Str2"").Value:="sDataTimePicker.DateTime";


 
Riva4   (2006-02-27 17:44) [5]

Удалено модератором


 
stone ©   (2006-02-27 17:46) [6]


> "sDataTimePicker.DateTime";

Зачем в апострофы взял?


 
Riva4   (2006-02-27 17:46) [7]

//ну и так тоже

tblIndustry.SQL.Add("SELECT *");
tblIndustry.SQL.Add("FROM books");
tblIndustry.SQL.Add("WHERE DateTime=:Str2");
tblIndustry.Parameters.ParamByName("Str2").Value:="sDataTimePicker.DateTime";

//и вот так

fmMain.tblIndustry.Filtered:=true;
fmMain.tblIndustry.Filter:= "DataTime="""+sDataTimePicker.DateTime+"""";


 
Riva4   (2006-02-27 17:48) [8]


Зачем в апострофы взял?

не это опечатка


 
stone ©   (2006-02-27 17:50) [9]

Не забудь, что формат DateTime содержит не только дату, но и время. Поэтому, если дата совпадет, а время нет, рекордсет будет пустой.


 
Riva4   (2006-02-27 17:50) [10]

tblIndustry.SQL.Add("SELECT *");
tblIndustry.SQL.Add("FROM books");
tblIndustry.SQL.Add("WHERE DateTime=:Str2");
tblIndustry.Parameters.ParamByName("Str2").Value:=sDataTimePicker.DateTime;


 
Riva4   (2006-02-27 17:52) [11]

//А как мне тогда енто победить?

tblIndustry.SQL.Add("SELECT *");
tblIndustry.SQL.Add("FROM books");
tblIndustry.SQL.Add("WHERE DateTime=:Str2+%");
tblIndustry.Parameters.ParamByName("Str2").Value:=sDataTimePicker.DateTime;

так прокатит?


 
stone ©   (2006-02-27 17:55) [12]

нет. если у тебя хранится только дата (время равно 0:00:00), то
tblIndustry.Parameters.ParamByName("Str2").Value := trunc(sDataTimePicker.DateTime);


 
Riva4   (2006-02-27 18:06) [13]

Не а... не помогло. Может это из-за того как в MSSQL хранятся данные
(в формате  27фев2006?)


 
Anatoly Podgoretsky ©   (2006-02-27 19:44) [14]

Riva4   (27.02.06 18:06) [13]
в MSSQL хранятся данные в формате  DateTime


 
paul_k ©   (2006-02-28 09:12) [15]

Ты передаешь дату со временем. Сервер вероятнее всего хранит тоже со временем.
небольшое прреобразование помогавет это обойти
для выборки на дату
select field1,...,fieldN
from table
WHERE CONVERT(datetime, convert(varchar,YOR_DATE_FIELD,3),3)= CONVERT(datetime, convert(varchar,YOR_DATE_PARAM,3),3)

Для периода
WHERE YOR_DATE_FIELD >= CONVERT(datetime,convert(varchar, YOR_DATE_PARAM_START, 3),3)
AND YOR_DATE_FIELD < CONVERT(datetime,convert(varchar, DATEADD(dd,1,YOR_DATE_PARAM_START), 3),3)

вместо преобразования параметра для отсечения времени в запросе можно передавать  не sDataTimePicker.DateTime (дата и время) а sDataTimePicker.Date (только дата)


 
paul_k ©   (2006-02-28 09:14) [16]

прошу пардону в строке
AND YOR_DATE_FIELD < CONVERT(datetime,convert(varchar, DATEADD(dd,1,YOR_DATE_PARAM_START), 3),3)
читать YOR_DATE_PARAM_END


 
Nikolay M. ©   (2006-02-28 10:12) [17]


> paul_k ©   (28.02.06 09:12) [15]
> для выборки на дату
> select field1,...,fieldN
> from table
> WHERE CONVERT(datetime, convert(varchar,YOR_DATE_FIELD,3),
> 3)= CONVERT(datetime, convert(varchar,YOR_DATE_PARAM,3),
> 3)


В таком виде индекс на поле не будет использоваться. Конечно, если индекса нет, тогда без разницы. Еще вариант, выглядит менее громоздко:
WHERE DATEDIFF (day, FIELD, PARAM) = 0.

Но поскольку одна дата - это частный случай временного интервала, лучше всегда пользоваться твоим вторым вариантом (для периода).


 
paul_k ©   (2006-02-28 10:46) [18]

> В таком виде индекс на поле не будет использоваться

естественно. Но пока я встречал другой вариант. Если по дате надо искать то она уже при вставке прогоняется через 3-й формат, чтоб времени там и в помине не было. Как результат - в запросе его отсекать у поля не надо, следовательно и скорость работы завпроса выше и индекс если есть то используется.

Но, это уже проектировать базу надо:)


 
Riva4   (2006-02-28 11:16) [19]

ПАсиба всем - все работает, тока был бы презнателен если кто-нить пояснит, что значат эти параметры

(datetime, convert(varchar,YOR_DATE_PARAM,3),3)

ну datetime и convert понятно, а почему varchar и что такое 3?


 
Nikolay M. ©   (2006-02-28 11:39) [20]


> Если по дате надо искать то она уже при вставке прогоняется
> через 3-й формат

Ну не всегда же время можно отбросить :(


> почему varchar и что такое 3

http://www.sql.ru/faq/faq_topic.aspx?fid=110


 
paul_k ©   (2006-02-28 12:56) [21]

varchar - тип данных. подробнее - QueryAnalizer F1 varchar
3- формат даты dd/mm/gg
подробнее о форматах конвертации даты QueryAnalizer F1 convert



Страницы: 1 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.03 c
15-1140730129
McSimm(proxy)
2006-02-24 00:28
2006.03.19
Как такое может быть.?


2-1141197033
WChek
2006-03-01 10:10
2006.03.19
Работа с параметрами


1-1139514668
Yozch1
2006-02-09 22:51
2006.03.19
вызов процедуры из DLL


4-1135703481
oleggar
2005-12-27 20:11
2006.03.19
PID of process


3-1138354243
Barsky
2006-01-27 12:30
2006.03.19
Как сделать выборку не чувствительную к регистру?