4

在实现时间日期时间对时,哪种方法更好?

方法一

_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

方法二

_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 会更可取..

4

1 回答 1

2

对于 continua(例如日期时间或数字度量),我几乎总是推荐半开区间方法(方法 2)。正如您所说,方法 1 往往会产生间隙,或者您需要知道计算终点的确切精度。在方法 2 中计算端点总是更简单。

BETWEEN就我而言,与能够快速确保查询的正确性相比,能够使用的“好处”是一个非常小的好处。

对于非连续数据(没有时间的日期或离散数字),我可能会恢复使用封闭间隔。

于 2013-11-20T11:14:01.077 回答