在实现时间日期时间对时,这是更好的方法吗?
方法1
_RK FROM_DTTM TO_DTTM
1 01-JAN-2012 00:00:00 31-DEC-2012 23:59:59 ------------> Old record closed out
1 01-JAN-2013 00:00:00 31-DEC-4949 23:59:59 ------------> New active record
与filter子句一起使用如下:
where FROM_DTTM <= &FILTER_DATE <= TO_DTTM
方法2
_RK FROM_DTTM TO_DTTM
1 01-JAN-2012 00:00:00 01-JAN-2013 00:00:00 ------------> Old record closed out
1 01-JAN-2013 00:00:00 31-DEC-4949 23:59:59 ------------> New active record
与filter子句一起使用如下:
where FROM_DTTM <= &FILTER_DATE < TO_DTTM
注意事项:
方法1与BETWEEN子句语法(包含范围)兼容.出于这个原因,我认为这是最好的方法 – 而且这是我的关注 – 在结束时间戳和开放时间戳之间总会存在差距!例如,以下将(从业务角度不正确)返回任何内容:
where FROM_DTTM <= '31-DEC-2012 23:59:59.1'dt <= TO_DTTM
不同的数据库在这里具有不同的精度水平.我想必须有标准(在过滤时总是舍入到最接近的秒),但只是想知道是否有任何其他理由支持方法1(例如提议的双时间’AS OF’语法兼容性)?或者确实,方法2是否(以及为什么)更可取.
最佳答案 对于continua(例如日期时间或数值测量),我几乎总是推荐半开区间方法(方法2).正如您所说,方法1往往会产生间隙,或者您需要知道计算终点的精确精度.计算方法2中的终点总是趋于简单.
就我而言,能够使用BETWEEN的“好处”是一个非常小的,与能够快速确保自己查询的正确性相比.
对于非连续数据(没有时间的日期,或离散的数字),我可能会恢复使用闭合间隔.