Oracle - 从日期字符串转换时在两个日期(包括)之间选择的记录

ale*_*ale 2 oracle

我有以下Oracle查询

SELECT *
FROM table 
WHERE date_opened 
BETWEEN ((TO_DATE('2011-08-01', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) 
AND ((TO_DATE('2011-08-31', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400))
Run Code Online (Sandbox Code Playgroud)

这几乎有效,但它不包括2011-08-31的日期记录.有任何想法吗?它可能与我如何转换我的日期字符串有关...

更新:我真的应该说日期实际上是一个UNIX时间戳.这就是我使用86400和01-JAN-1970的原因

谢谢 :)

Luk*_*der 5

如果您的结果中没有包含间隔的上限,那么您可能正在构建一个相对于上限的"独占"过滤器.所以只需在上限添加一天.即

AND ((TO_DATE(...) - to_date(...) + 1) * (86400)) - 1
Run Code Online (Sandbox Code Playgroud)

在Oracle中,+1将在日期时间算术中使用一天.

注意:BETWEEN .. AND创建一个包容性过滤器,正如Ollie所说,但是你的算术可能会通过将事物转换为秒来改变这种行为