在SQL查询中为日期范围设置限制

时间:2012-09-13 13:50:07

标签: sql oracle oracle10g

我有部分SQL查询。

此SQL查询与其他SQL查询没有什么不同,但唯一不同的是,?DATE1::?是为基于Web的报告工具自定义构建的。

含义?DATE1::?将允许用户从下拉菜单中选择日期。我可以使用?DATE1::?或在查询中手动输入日期,例如05-01-2012

这是where子句:

WHERE To_Date(to_char(B.startdatetime, 'DD-MON-YYYY')) >= To_Date('?DATE1::?','MM/DD/YYYY')
  and To_Date(to_char(B.enddatetime, 'DD-MON-YYYY')) <= To_Date('?DATE2::?','MM/DD/YYYY')

如何更改查询,以便用户无法选择超过7天的日期范围?

2 个答案:

答案 0 :(得分:1)

添加此条件aslo

MySQL的

and To_Date(to_char(B.startdatetime, 'DD-MON-YYYY'))
     <= DATE_ADD(To_Date(to_char(B.enddatetime, 'DD-MON-YYYY')), INTERVAL -7 DAY)

的Oracle

and To_Date(to_char(B.startdatetime, 'DD-MON-YYYY'))
     <= DateADD('dd' , -7, To_Date(to_char(B.enddatetime, 'DD-MON-YYYY')))  

答案 1 :(得分:0)

我最终获取了原始查询后用户选择的日期之间的差异。

这是原始查询

WHERE To_Date(to_char(B.startdatetime, 'DD-MON-YYYY')) >= To_Date('?DATE1::?','MM/DD/YYYY')
  and To_Date(to_char(B.enddatetime, 'DD-MON-YYYY')) <= To_Date('?DATE2::?','MM/DD/YYYY')


在上述之后添加此条件。

To_Date('?DATE2::?','MM/DD/YYYY') - To_Date('?DATE1::?','MM/DD/YYYY')<=7


最终查询。

WHERE To_Date(to_char(B.startdatetime, 'DD-MON-YYYY')) >= To_Date('?DATE1::?','MM/DD/YYYY')
  and To_Date(to_char(B.enddatetime, 'DD-MON-YYYY')) <= To_Date('?DATE2::?','MM/DD/YYYY')
  and To_Date('?DATE2::?','MM/DD/YYYY') - To_Date('?DATE1::?','MM/DD/YYYY')<=7