Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите как можно составить фильтр [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');


Наверх

Титульная страница Поиск, карта сайта Написать письмо