2015-12-10 44 views
2

我將一些計算從FORTRAN轉換爲PL/SQL。 請讓我解釋一下:減去2日期PL/SQL但日期之一是0

在我的Oracle數據庫表中,我有兩個屬性的以下日期值。

attribute1: '01/01/0001', This is a date not a string. 
attribute2: '08/24/1918', This is a date not a string. 

我所試圖做的是,如果ATTRIBUTE1等於01/01/0001' ,然後將其轉換成00/00/0000再減去attribute2就像下面的代碼:

//Decode missing for '01/01/0001' 
select round((to_date('01/01/0001', 'mm/dd/yyyy') - to_date('01/24/1918', 'mm/dd/yyyy'))/365.25, 3)as dt from dual; 

FORTRAN代碼正在做的是將'01/01/0001'轉換爲'0/0/0',然後進行減號操作。像這樣,

round((('0/ 0/ 0' - '08/24/1918')/365.25), 3). Round to the 3 decimal place. 

我知道我錯過了在PL/SQL代碼解碼上述轉換'01/01/0001,基本上爲零。

運行PL/SQL代碼,您將得到-1917.027的值。 FORTRAN代碼返回值爲-1918.732。 PL/SQL代碼關閉一天,一個月和一年。

如何將'01/01/0001'轉換爲零,然後減去一個日期?

請幫忙,並提前致謝。

+0

也許只是創建函數減去兩個日期硬核-1.705。 – dcieslak

回答

1

對我而言,使用CASE聲明會更容易。喜歡的東西:

CASE 
    WHEN attribute1 = '01/01/0001' THEN -1*(EXTRACT(YYYY FROM attribute2)+ EXTRACT(DDD FROM attribute2)/365) 
    ELSE attribute1 - attribute2 
END 

或者,你可以只是轉換一切Julian日期,然後做減法用修正係數的日期爲01/01/0001