在實現時間日期時間對時,哪種方法更好?SCD日期對的最佳實踐(關閉/打開時間戳)
方法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更可取。
那麼,我已經實現了SAS DDS,我仍然討厭時間有效性的數據時間值。現在,我只是存儲日期值。我懷疑你會跟蹤盤中的變化。 – vasja
不知道我是否同意,但不過 - 應該使用哪種方法?我們有與日期值相同的困境! –
對於'imprecise'或變量精度類型(基本上,除了整數計數以外的任何內容)的所有實例,請[閱讀此博客文章](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/9 what-do-between-and-the-devil-have-in-common.aspx)(它實際上是關於時間戳的,並且有些特定於SQL Server)。就我個人而言,我認爲應該從標準中刪除「BETWEEN」,特別是因爲您考慮列出的「但是」;它只是鼓勵人們錯誤地思考這樣的範圍...... –