Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизНеправильный выбор при использовании даты в качестве условия Найти похожие ветки
← →
Avreliy (2003-05-16 15:42) [0]Здравствуйте мастера.
Вопрос таков: в таблице, среди прочих полей, присутствует таких два поля: DATEBEGIN И DATEEND. Необходимо выбрать все строки таблицы, в промежуток DATEBEGIN..DATEEND которых попадает определённая дата(:DATE). Даты начала и окончания необходимо учитывать. Пишу запрос:
SELECT *
FROM T1
WHERE DATEBEGIN <= :DATE
AND ((DATEEND >= :DATE) OR (DATEEND IS NULL))
Всё работает правильно, за исключением того, что дата окончания
не учитывается. Т.е. если, например, DATEBEGIN = 1 мая, а DATEEND = 10 мая и :DATE = 10 мая, то строка выбрана не будет. Не могу понять, почему?
Для запроса использую компонент QUERY, метод доступа к БД - через BDE.
← →
Stas (2003-05-16 15:45) [1]У тебя два раза повторяется параметр, а это воспринимается как два разных параметра, просто задай их одинаковыми.
Parametrs[0].Value:=date
Parametrs[1].Value:=date
← →
Avreliy (2003-05-16 15:51) [2]>Stas
А даже, есди два разных, то как это влияет на выборку? Ведь значение получается одинаковое.
← →
Avreliy (2003-05-16 16:00) [3]Дело не в параметрах...
В другом месте программы при реализации фильтрации указывается точно такое условие, но и результат тот же.
← →
Desdechado (2003-05-16 16:00) [4]в БДЕ есть глюк: когда параметры названы одинаково, то значение присваивается только первому из них. Назови их по-разному, присвоив одинаковые значения
← →
Johnmen (2003-05-16 16:04) [5]Может стоит попробовать
WHERE :DATE BETWEEN DATEBEGIN AND DATEEND ?
← →
Avreliy (2003-05-16 16:23) [6]В таком случае не учитывается NULL.
Кроме того, как исправить, такой же семантически, код на PASCAL"е?
← →
Johnmen (2003-05-16 16:29) [7]Да, я немного стормозил...:)
>Кроме того, как исправить, такой же семантически, код на PASCAL"е?
Что это значит ?
← →
Avreliy (2003-05-16 16:46) [8]>Desdechado
Спасибо, SQL-код исправил, всё работает.
>Что это значит ?
Дело в том, что синхронно с выполнением запроса я фильтрую таблицу. И пишу так:
------------------------------------------------
Accept := ((Table1DATEBEGIN.AsDateTime <= Form1.DateTimePicker1.Date)
AND ((Table1DATEEND.AsDateTime >= Form1.DateTimePicker1.Date)
OR (Table1DATEEND.IsNull)))
------------------------------------------------
И опять-таки, последнее значение даты окончания не учитывается.
← →
Silver_ (2003-05-16 16:59) [9]
> У тебя два раза повторяется параметр, а это воспринимается
> как два разных параметра, просто задай их одинаковыми.
в таких ситуациях меня спасало
.ParamByName("Date"):=...
значение присваивается всем параметрам с данным именем
← →
Avreliy (2003-05-16 17:03) [10]> .ParamByName("Date"):=...
Что это значит?
← →
NDeu (2003-05-17 02:23) [11]1.Поле DATEEND определено как DATE или TIMESTAMP?
2.Параметр Date - AsDate или AsDateTime?
← →
ЮЮ (2003-05-17 05:00) [12]:DATE = 10 мая 0:00
DATEEND = 10 мая + часть суток меджу 10 мая и 11 мая, поэтому записи на 10 мая и не попадают. В параметре надо ставить или 11 мая 0:00 или 10 мая 23:59
← →
ЮЮ (2003-05-17 05:06) [13]Сорри, твоём случае, наоборот. Убедись, что в :DATE только целая часть
← →
Wizard_Ex (2003-05-17 13:52) [14]DATEBEGIN = 1 мая, а DATEEND = 10 мая + 1
Это поможет
← →
Wizard_Ex (2003-05-17 13:57) [15]В общем ЮЮ прав
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.127 c