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