Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1141197162
Wel
2006-03-01 10:12
2006.03.19
Массив jpg из файла


2-1140208811
Saimon
2006-02-17 23:40
2006.03.19
Как добиться в дельфи, чтобы форма была на уровне рабочего...


6-1133691903
samalex
2005-12-04 13:25
2006.03.19
Сделать почтовые сообщения по-русски


8-1129184506
kyn66
2005-10-13 10:21
2006.03.19
Где найти ?


2-1141310103
Alex7
2006-03-02 17:35
2006.03.19
Удаление формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский