我需要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)
答案 0 :(得分:0)
你的问题不明确,但这是我对它的解释。你有一个这样的表:
如果您想要所有适用于该范围的产品: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')等,具体取决于输入的格式