Oracle
Oracle Lag() on date 輸出錯誤數據
Oracle DB 19 - Sql 開發者 19 - NLS DD-MON-RR
我有一張桌子
ID NAME EFFDT NODE PARENT SHA DEPT 01-JAN-01 A10200 TOP SHA DEPT 04-JAN-11 A10200 X10200 SHA DEPT 01-JAN-14 A10200 TOP SHA DEPT 04-JAN-14 A10200 TOP
我正在使用
Lag()
函式來創建時間段這是我的查詢:
select id ,name ,effdt ,lag(effdt-1,1,null) over (partition by node order by effdt desc) AS EFFDTEND ,node ,parent FROM TABLE ORDER BY node, effdt
結果 :
ID NAME EFFDT EFFDTEND NODE PARENT SHA DEPT 01-JAN-01 31-DEC-09 A10200 TOP SHA DEPT 04-JAN-11 31-DEC-12 A10200 X10200 SHA DEPT 01-JAN-14 03-JAN-14 A10200 TOP SHA DEPT 04-JAN-14 05-JAN-14 A10200 TOP
看看第一行,我得到
31-DEC-09
了代替03-JAN-11
和31-DEC-12
代替31-DEC-13
一切正常後
01-JAN-14
!我已經嘗試過:
effdt
使用TO_DATE()
NLS 模板進行全部轉換- 使用間隔 -1 天代替
effdt-1
SELECT TO_DATE('04-JAN-11', 'DD-MON-RR')-1 FROM DUAL;
返回:
03-JAN-11
更新
這裡要求的是小提琴連結:小提琴
在 Fiddle 和 18c 上,錯誤不會重現
select * from v$version; Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
任何的想法 ?
我真的不知道為什麼以及如何發生,但是在我們的 ITOps 對備用邏輯數據庫進行刷新之後,我的問題就解決了。
在我的 11gXE 上看起來不錯:
SQL> with test (id, name, effdt, node, parent) as 2 (select 'SHA', 'DEPT', date '2001-01-01', 'A10200', 'TOP' from dual union all 3 select 'SHA', 'DEPT', date '2011-01-04', 'A10200', 'X10200' from dual union all 4 select 'SHA', 'DEPT', date '2014-01-01', 'A10200', 'TOP' from dual union all 5 select 'SHA', 'DEPT', date '2014-01-04', 'A10200', 'TOP' from dual 6 ) 7 select id, name, effdt, 8 lag(effdt - 1, 1, null) over (partition by node order by effdt desc) effdtend, 9 node, parent 10 from test 11 order by node, effdt; ID NAME EFFDT EFFDTEND NODE PARENT --- ---- --------- --------- ------ ------ SHA DEPT 01-JAN-01 03-JAN-11 A10200 TOP SHA DEPT 04-JAN-11 31-DEC-13 A10200 X10200 SHA DEPT 01-JAN-14 03-JAN-14 A10200 TOP SHA DEPT 04-JAN-14 A10200 TOP SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production PL/SQL Release 11.2.0.2.0 - Production CORE 11.2.0.2.0 Production TNS for 64-bit Windows: Version 11.2.0.2.0 - Production NLSRTL Version 11.2.0.2.0 - Production SQL>