sql дата между параметрами - PullRequest
0 голосов
/ 09 июня 2011

То, что я считал простым, оказалось кошмаром. , , Таблица, из которой я пытаюсь получить данные, очень проста:

R_TYPE (string)
R_PRICE (currency)
S_DATE (date)
E_DATE (date)

Я бегу:

SELECT * 
  FROM MYTABLE 
 WHERE R_TYPE = :a1 
   AND R_PRICE BETWEEN S_DATE = :a2 
                   AND E_DATE = :a3

Параметры:

ABSQuery1.params.ParamByName('a1').asString :=cxTextEdit;
ABSQuery1.params.ParamByName('a2').asDate := DateTimePicker1;
ABSQuery1.params.ParamByName('a3').asDate := DateTimePicker2;

Но это не сработает .... Есть идеи?

1 Ответ

1 голос
/ 09 июня 2011

Ваш запрос запутан: цена не может быть между логическим результатом сравнения дат.

Если средство выбора даты выбирает любую цену, у которой была полная продолжительность (т. Е. Она начиналась и заканчивалась) между выбранными датами, используйте это:

select * from MYTABLE where R_TYPE = :a1 and S_DATE > :a2 AND E_DATE < :a3;

Если средство выбора даты выбирает любую цену, которая имела некоторую продолжительность между выбранными датами (т. Е. По крайней мере было некоторое перекрытие выбранного диапазона дат и диапазона дат цены), используйте это:

select * from MYTABLE where R_TYPE = :a1 and S_DATE < :a3 AND E_DATE > :a2;
...