Нет ничего очевидного, кроме, возможно, использования to_date
и того, как именно вы его используете, зависит от типа данных и формата параметров.Я предполагаю, что это строки, но не знаю, в каком формате они предоставлены (я использовал yyyy-mm-dd ниже).
SELECT
st.dcid
, st.student_number
, st.lastfirst
, st.grade_level
, to_char(f.date_value, 'MM/DD/YYYY')
, f.fee_type_name
, f.description
, f.fee_amount
, f.fee_paid
, f.fee_balance
FROM PS.FEE f
LEFT OUTER JOIN STUDENTS st ON f.StudentID = st.ID
WHERE f.SCHOOLID = %param1%
AND st.ENROLL_STATUS = 0
AND f.date_value BETWEEN to_date(%parm2%,'yyyy-mm-dd') AND to_date(%parm3%,'yyyy-mm-dd')
ORDER BY
st.LASTFIRST
Единственное, что следует отметить, это то, что between
частоплохой способ определения диапазона дат - но это отчасти зависит от точности ваших данных во времени.Если ваши данные верны только за день, то between
, как вы видите выше, в порядке.Если уровень точности ниже (например, второй или ниже), не используйте вместо:
AND f.date_value >= to_date(%parm2%,'yyyy-mm-dd')
AND f.date_value < to_date(%parm3%,'yyyy-mm-dd') + 1