Форум: "Базы";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
ВнизПодскажите как можно составить фильтр Найти похожие ветки
← →
dreamse (2007-10-22 02:12) [0]Поле RecordDTime это DataTime т.е там храниться и дата и время
Как составить SQL запрос чтобы можно было указать параметры к этому полю только дату ? ( В поле записи в виде Даты и времени )
Делаю так
SELECT * FROM main
WHERE RecordDTime = "22.10.2007"
ничего не выводит :(
с SQL только недавно начал знакомиться.
Запись в RecordDTime примерно следующая : 22.10.2007 02:30:34
Нужно в итоге получить все записи где RecordDTime совпадает с тем что указал в фильтре
← →
Antoxa2005 (2007-10-22 02:39) [1]Попробуй
SELECT * FROM main WHERE RecordDTime = :RDT;
...Query1.Parameters[0].Value:=StrToDate("22.10.2007");
← →
Dreamse (2007-10-22 03:02) [2]Так и пробую, может просто ошибка в запросе ?
У меня 2 даты и нужно отчёт выводить с начала одной даты и по окончанию другой :
MyQueryOtshot.SQL.Text := "SELECT * FROM main_log WHERE RecordDTime >= :pFromDate and RecordDTime <= :pToDate";
MyQueryOtshot.ParamByName("pFromDate").AsDateTime := DateTime_ObOtshot.Date;
MyQueryOtshot.ParamByName("pToDate").AsDateTime := DateTime_ObOtshot2.Date + 1;
MyQueryOtshot.Open;
В чём может быть ошибка ?
← →
Dreamse (2007-10-22 03:05) [3]Например следующий SQL запрос выводит только данные за текущий день :(
но если его же вставить в SQL редактор то данные вообще не выводяться :(
SELECT * FROM main_log WHERE RecordDTime >= "21.10.2007" and RecordDTime <= "23.10.2007"
← →
Dreamse (2007-10-22 03:06) [4]Переделывать просто на 2 поля нереально, уже много слишком написано и кода и приложений с этой структурой БД
← →
Германн © (2007-10-22 03:13) [5]
> но если его же вставить в SQL редактор то данные вообще
> не выводяться :(
>
>
> SELECT * FROM main_log WHERE RecordDTime >= "21.10.2007"
> and RecordDTime <= "23.10.2007"
>
А кто есть "SQL редактор"?
А про параметры ни слова!
← →
Dreamse (2007-10-22 03:19) [6]> Германн © (22.10.07 03:13) [5]
SQL редактор в EMS MySQL Manager
Про параметры не понял ничего.
Есть поле RecordDTime это TdataTime в нём находиться и дата и время
Есть SQL запрос
SELECT * FROM main_log WHERE RecordDTime = "21.10.2007"
Который ничего не выводит так как указывается не чёткое значение даты и времени а просто дата.
Вопрос : Как составить запрос чтобы указывать ТОЛЬКО дату и получить таблицу в которой RecordDTime совпадает указанной дате не обращая внимания на время ?
← →
Dreamse (2007-10-22 03:20) [7]Если указывать в коде Delphi следующие параметры :
MyQueryOtshot.SQL.Text := "SELECT * FROM main_log WHERE RecordDTime >= :pFromDate and RecordDTime <= :pToDate";
MyQueryOtshot.ParamByName("pFromDate").AsDateTime := DateTime_ObOtshot.Date;
MyQueryOtshot.ParamByName("pToDate").AsDateTime := DateTime_ObOtshot2.Date + 1;
MyQueryOtshot.Open;
т.е именно AsDateTime то данные выводятся но почему то только за текущий день. Например на сегодняшнее 22 число без разницы какая дата указана в параметрах.
← →
Reindeer Moss Eater © (2007-10-22 09:02) [8]Что попросил, то и выводится.
← →
Виталий Панасенко © (2007-10-22 09:16) [9]SELECT * FROM main
WHERE Cast(RecordDTime as DATE) = "22.10.2007"
не подходит ?
← →
engine © (2007-10-22 11:53) [10]> [7] Dreamse (22.10.07 03:20)
> MyQueryOtshot.ParamByName("pToDate").AsDateTime := DateTime_ObOtshot2.Dat
> e + 1;
MyQueryOtshot.ParamByName("pToDate").AsDateTime := IncDay(DateTime_ObOtshot2.Dat)
← →
Desdechado © (2007-10-22 12:10) [11]НИКОГДА не пишите дату в запросе в тестовом виде, т.к. правила ее преобразования во внутренний формат сервера могут зависеть от чего угодно (настроек локали компа, настроек самого сервера, каких-то их комбинаций, или вообще не быть настраиваемой). Используйте параметры, которые "начинять" тоже ОЧЕНЬ нежелательно преобразованием из строк.
Для отсечения времени от даты почти в любом SQL-сервере (где дата совместно с временем) есть специальная функция. Но гораздо удобнее указывать диапазон от 00:00 нужной даты до 00:00 следующей.
Dreamse (22.10.07 03:20) [7]
Так и должно быть.
← →
Anatoly Podgoretsky © (2007-10-22 16:48) [12]> Dreamse (22.10.2007 03:20:07) [7]
А что ты хочешь, наверно pFromDate равно текущему дню, а pToDate" на единицу больше.
← →
dreamse (2007-10-23 04:25) [13]> Anatoly Podgoretsky © (22.10.07 16:48) [12]
Это тестовая еденичка была. Уже подправил.
В общем проблема решена, быа проблема в составлении запроса :
Было
MyQueryOtshot.SQL.Text := "SELECT * FROM main_log WHERE RecordDTime >= :pFromDate and RecordDTime <= :pToDate";
А нужно было обозначить скобками :
MyQueryOtshot.SQL.Text := "SELECT * FROM main_log WHERE (RecordDTime >= :pFromDate) and (RecordDTime <= :pToDate)";
Когда SQL запрос составляешь с использованием переменных которые являються AsDataTime всё отлично выводит :MyQueryOtshot.SQL.Text := "SELECT * FROM main_log WHERE (RecordDTime >= :pFromDate) and (RecordDTime <= :pToDate)";
MyQueryOtshot.ParamByName("pFromDate").AsDateTime := trunc(DateTime_ObOtshot.Date);
MyQueryOtshot.ParamByName("pToDate").AsDateTime := trunc(DateTime_ObOtshot2.Date) + 1;
MyQueryOtshot.Open;
Спасибо всем кто откликнулся на данную проблему.
← →
Desdechado © (2007-10-23 11:23) [14]> А нужно было обозначить скобками :
Ну ни фига себе?!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c