Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизКак сделать фильтрацию по дате Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.013 c