Добавить фильтр диапазона дат - SQL-запрос - PullRequest
0 голосов
/ 27 сентября 2018

Я новичок в SQL и у меня проблема с тем, чтобы заставить мой запрос работать.Все, что мне нужно сделать, это добавить фильтр диапазона дат в запрос ниже.Я фильтрую по полю f.date_value.Parm 2 и Parm 3 будут датой, которую сотрудники выберут при составлении отчета.Этот отчет SQL работает со встроенным инструментом SQL в одном из наших программ, поэтому он немного отличается от SQL Developer, который мы используем для доступа к базе данных.Кто-нибудь имеет какие-либо идеи о том, что мне нужно изменить по запросу ниже?Большое спасибо!

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 %parm2% AND %parm3%)
ORDER BY st.LASTFIRST

1 Ответ

0 голосов
/ 27 сентября 2018

Нет ничего очевидного, кроме, возможно, использования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...