2012-08-15 155 views
0

我在SQL Query中有这个地方。我想知道是否可以限制该用户只能选择2天的日期范围。这意味着他们不能选择1个月或1周或超过2天的差异数据范围。SQL查询数据范围限制

WHERE 
    To_Date(to_char(B.time_stamp, 'DD-MON-YYYY')) >= To_Date('?DATE1::?','MM/DD/YYYY') 
and To_Date(to_char(B.rest_date, 'DD-MON-YYYY')) <= To_Date('?DATE2::?','MM/DD/YYYY') 
+1

甲骨文,我想? – 2012-08-15 16:34:43

+0

@Michael对不起,我不明白你的意思,你想让我添加Oracle标签吗? – Mowgli 2012-08-15 16:38:00

+0

是的 - 只是确认它是Oracle,所以它可以被标记为 – 2012-08-15 16:42:01

回答

0

如果我理解你的问题,你只是问如何限制两个日期,以便他们在两天之内彼此。日期数学是Oracle很简单(这是我的猜测,您正在使用的DB):

WHERE ABS(Date1 - Date2) <= 2 

你并不需要将其转换为所有TO_CHAR或其他任何东西,因为它是作为内部存储一个实际的日期。您可以使用相同类型的逻辑来确保它少于16小时:

WHERE ABS(Date1 - Date2) <= 16/24 

只要您记得适当调整您的单位。

请注意,在这种情况下,2天意味着48小时。如果你的意思是它必须是2个实际的日子,那么它就会有所不同。

+0

''?DATE2 ::?''和''?DATE1 ::?''是html的一部分,意味着用户通过html选择范围,我不知道这是否会有所作为。 **编辑**我试过了,我得到这个错误,'在处理命令期间发生了一个或多个错误。 ORA-00933:SQL命令没有正确地结束于' – Mowgli 2012-08-15 16:44:52

+0

我不认为我理解毕竟。你能澄清你的问题吗?什么是b.time_stamp和b.rest_date? DATE1和DATE2从哪里来?哪些日期需要最多有两天的差异? – MJB 2012-08-15 16:57:35

+0

'B.time_stamp = DATE1'和'B.rest_date = DATE2''?DATE1 ::?'和'?DATE2 ::?'表示用户可以从下拉菜单中选择。或者如果我有'B.time_stamp = 08/10/2012'和'B.rest_date = 08/15/2012'这意味着手动编码的用户不能更改日期。所以date1和date2给用户选择日期,如果没有,我必须手动输入查询代码。 – Mowgli 2012-08-15 17:45:57