Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Подскажите как можно составить фильтр   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
2-1203282899
batya-x
2008-02-18 00:14
2008.03.16
как поймать сообщение о изменеие картинки в IMAGE


3-1192690824
abhtr
2007-10-18 11:00
2008.03.16
конвертация DBF в Firebird


11-1185431184
Vladimir Kladov
2007-07-26 10:26
2008.03.16
Версия 2.74


2-1203413997
KyRo
2008-02-19 12:39
2008.03.16
Компонент TGauge


4-1184897733
balepa
2007-07-20 06:15
2008.03.16
RS-485 и ЦП8501/2