Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.008 c
14-13416
DVM
2003-05-19 09:36
2003.06.05
Одн исходник для двух языков программирования. Возможно ли?


3-13092
Patrick
2003-05-19 09:23
2003.06.05
Сброс параметра автоувеличения значения поля.


1-13117
Beregin
2003-05-24 19:23
2003.06.05
TFileStream?


14-13429
Style
2003-05-19 09:49
2003.06.05
DelphiChallenge: Завершен 1-й тур соревнований.


7-13486
ws
2003-04-03 16:19
2003.06.05
Как программно отличить виртуальный CDROM от реального?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский