Oracle SQL NOT BETWEEN 未返回正确数据
Posted
技术标签:
【中文标题】Oracle SQL NOT BETWEEN 未返回正确数据【英文标题】:Oracle SQL NOT BETWEEN not return correct data 【发布时间】:2015-11-09 20:56:34 【问题描述】:我希望退回所有当前未出租的物品,这由每个物品的开始和结束日期定义。
我创建了以下代码,但这并没有返回正确的结果。
SELECT DISTINCT item.ITEM_ID, details.barcode
FROM item
JOIN details ON item.ITEM_ID = details.ITEM_ID
WHERE (item.HIRE_DATE NOT BETWEEN TO_DATE('01/05/2015','dd/mm/yyyy')
AND TO_DATE('11/05/2015','dd/mm/yyyy'))
AND item.END_DATE NOT BETWEEN TO_DATE('01/05/2015','dd/mm/yyyy')
AND TO_DATE('11/05/2015','dd/mm/yyyy');
我已经包含了我的表格的一小部分来解释我需要什么:
Hire_Date | End_Date | Item_ID
-------------------------------------
01/01/2015 | 03/01/2015 | ItemID_12
06/01/2015 | 07/01/2015 | ItemID_12
03/01/2015 | 10/01/2015 | ItemID_5
02/01/2015 | 04/01/2015 | ItemID_8
12/01/2015 | 15/01/2015 | ItemID_10
11/01/2015 | 20/01/2015 | ItemID_4
15/01/2015 | 16/01/2015 | ItemID_5
01/01/2015 | 03/01/2015 | ItemID_3
07/01/2015 | 10/01/2015 | ItemID_3
01/01/2015 | 07/01/2015 | ItemID_2
10/01/2015 | 15/01/2015 | ItemID_12
16/01/2015 | 20/01/2015 | ItemID_3
05/01/2015 | 15/01/2015 | ItemID_8
16/01/2015 | 20/01/2015 | ItemID_10
10/01/2015 | 15/01/2015 | ItemID_2
在上表中,如果我将开始日期设置为06/01/2015
,将结束日期设置为10/01/2015
,它只会返回ItemID_4
和ItemID_10
,因为在该日期范围内根本不使用这些。
【问题讨论】:
你有什么数据,它返回什么以及你期望它应该返回什么? 另请注意,hire_date
或 end_date
的 null
值将导致您的条件为假。
您确定您的格式不应该是“mm/dd/yyyy”吗?
更新了我的帖子以提供更多细节
【参考方案1】:
也许你只是在寻找另一种表达方式:
HIRE_DATE > TO_DATE('11/05/2015','dd/mm/yyyy') OR END_DATE < TO_DATE('01/05/2015','dd/mm/yyyy')
【讨论】:
以上是关于Oracle SQL NOT BETWEEN 未返回正确数据的主要内容,如果未能解决你的问题,请参考以下文章