我有以下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的原因
谢谢 :)
如果您的结果中没有包含间隔的上限,那么您可能正在构建一个相对于上限的"独占"过滤器.所以只需在上限添加一天.即
AND ((TO_DATE(...) - to_date(...) + 1) * (86400)) - 1
Run Code Online (Sandbox Code Playgroud)
在Oracle中,+1将在日期时间算术中使用一天.
注意:BETWEEN .. AND创建一个包容性过滤器,正如Ollie所说,但是你的算术可能会通过将事物转换为秒来改变这种行为