日期范围内的Oracle SQL条件

时间:2017-07-11 07:55:59

标签: sql oracle date

我需要Oracle SQL查询来获取符合此条件的所有行: 我有一张表,其中有产品的开始日期为有效期和有效期结束日期。输入中我有一个日期范围(例如20170530和20170630)。我会得到在给定范围内有效的所有产品。谢谢

修改 你是对的,我试着通过一个例子更清楚。 我有一个表格产品,其中我有两个字段:START_DATE和END_DATE(yyyymmdd)

PRODUCTS
----------------------------
|id | start_date | end_date |
----------------------------
|1  | 20170101   | 20171230 |
|2  | 20170501   | 20170705 |
|3  | 20170101   | 20170501 |
|4  | 20170601   | 20170620 |
|5  | 20171010   | 20171110 |
|6  | 20170110   | 20170610 |

我想提取20170530-20170630范围内有效的所有产品。这意味着产品的有效性必须在20170530-20170630的给定范围内。 因此,从上表中,我将提取id为

的产品
1 
2
4
6

谢谢

**已解决编辑2 ** 好吧,我想要的是获取日期与作为参数给出的数据的输入范围重叠的行。为此,有一个简单的查询:

(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)

1 个答案:

答案 0 :(得分:0)

你的问题不明确,但这是我对它的解释。你有一个这样的表:

Figure 1: My Product Table

如果您想要所有适用于该范围的产品:2017年7月9日至2017年7月11日,那么您可能希望退回ITEM 1和ITEM 2。 SQL Query看起来像这样:

  

选择 *

     

FROM MY_PRODUCT_TABLE

     

WHERE MY_START_DATE BETWEEN START_DATE AND END_DATE

     

AND MY_END_DATE BETWEEN START_DATE AND END_DATE

请记住,BETWEEN函数是包含在内的,这意味着它也会考虑START_DATE和END_DATE之间的值。

注意:如果您使用字符串变量作为输入,最好使用TO_DATE函数(即TO_DATE(MY_START_DATE,'DD.MM.YYYY')等,具体取决于输入的格式