实现时间日期时间对时,这是更好的方法吗?
方法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
与过滤子句一起使用如下:
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
与过滤子句一起使用如下:
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是否(以及为什么)更为可取。
答案 0 :(得分:2)
对于continua(例如日期时间或数值测量),我几乎总是推荐半开区间法(方法2)。正如您所说,方法1往往会产生间隙,或者您需要知道计算终点的精确精度。计算方法2中的终点往往更简单。
就我而言,能够使用BETWEEN
的“好处”是一个非常小的,与能够快速确保查询的正确性相比。
对于非连续数据(没有时间的日期,或离散的数字),我可能会恢复使用闭区间。