添加日期范围过滤器-SQL查询

时间:2018-09-27 00:29:32

标签: sql oracle date filter

我是SQL的初学者,但遇到使我的查询无法正常工作的问题。我需要做的就是在下面的查询中添加一个日期范围过滤器。我正在按字段f.date_value进行过滤。参数2和参数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 :(得分:0)

除了可能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