2011-06-09 2 views
0

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

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

Ваш SQL, очевидно, логически фл , потому что это сводится к «Дайте мне все записи типа« a1 », которые имеют цену между True и False». Не могли бы вы описать на простом английском то, что вы хотели бы достичь? –

ответ

1

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

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

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; 
+0

Как насчет S_DATE и E_DATE ** равным ** параметрам? «МЕЖДУ» работает включительно. Плюс в первом запросе вы можете просто дважды использовать BETWEEN, один раз для каждого параметра. –

+0

'выберите * из R_PRICES, где R_TYPE =: A1 и S_DATE <: a3 И E_DATE>: a2'; выбирает только разработанный «ценовой диапазон». Пример: ЦЕННЫЙ район между 25/4/2011 и 25/6/2011 составляет 120 евро. Теперь, когда я попал в цитату с параметрами:: a2 = 10/6/2011 и : a3 = 11.6.2011 Я попал в сетку: S_DATE = 25/4/2011 E_DATE = 25/6/2011 Который не то, что я хочу want.I «выбранные» даты отображаются и правильная цена, т.е. S_DATE = 10/6/2011 E_DATE = 11.6.2011 цЕНА 120 первая версия queery: и S_DATE>: a2 и E_DATE <: a3 Работа с одинаковыми параметрами не отображает ничего (?). – user763539

+0

Я думаю, что для этого запроса потребуется параметр DATEDIFF (AS DAYS), потому что я думаю, что я буду работать с перекрывающимися ценами, если они охватывают разные ценовые диапазоны. Нечто подобное здесь: http://stackoverflow.com/questions/5452774/hotel-booking-rates-sql-problem – user763539