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_4ItemID_10,因为在该日期范围内根本不使用这些。

【问题讨论】:

你有什么数据,它返回什么以及你期望它应该返回什么? 另请注意,hire_dateend_datenull 值将导致您的条件为假。 您确定您的格式不应该是“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 未返回正确数据的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql与标准的sql语句的区别?

oracle会记录每次执行的sql语句吗

oracle 怎么查看过去的一条sql执行时间

oracle 中的 sql语句查询

怎么向oracle中导入大sql文件

sql nvarchar 对应oracle 啥类型