2012-11-18 72 views
1

我想問一下如何檢查兩個日期之間的差異。Days_Between two dates

  1. BillingDate其是日期類型與條目 'DD-MON-YYYY'

  2. ,另一個日期爲當前日期。

sys_date - BillingDate = daysFromBilled 

很多的例子,我發現他們居然說第二個日期來計算的差異,但我所尋找的是當前日期之間的區別,所以我可以將其添加到一個時間表或工作。

我正在使用oracle btw。


還有一點要補充,我將繼續尋找,但如果你也可以推薦,我應該如何實現這樣的功能:從所有BillingDate

  1. 計算的時間差項
  2. 要如果差異超過30天,則觸發更改表以將狀態設置爲遲。
  3. 如果狀態是超過60天的服務屬性將被改變,改削

這裏是我的粗略表格佈局

Cust    Billing 
--------   ---------- 
CustID(PK)  BillingID(PK) 
LateStatus  LateStatus 
Service   BillingDate 
       CustID 

非常感謝。

更新

REPLACE VIEW DateDifference作爲 選擇TRUNC(SYSDATE) - 從帳單TRUNC(BillingDate) ;

似乎合法。

+0

「alter table」用於更改表格的* definition *(例如添加或刪除列)。你想'更新'表格,而不是「改變」它。 –

回答

1

只需從其他減去一個日期:

BillingDate - sysdate 

要做到這一點在SELECT語句,只是用這樣的:

select billingdate - sysdate as daysFromBilled 
from ... 

裏面你使用常規的賦值運算符的觸發器:

declare 
    daysFromBilled integer; 

begin 
    daysFromBilled := :new.billingdate - sysdate; 
... 

這將返回天數,包括小數值,如果時間是di不同的(Oracle中的一個DATE列也包含一個時間!)。

如果你只想得到充​​分的日子裏,用這個:

trunc(BillingDate) - trunc(sysdate) 

你的這項聲明:

日期類型具有入口 'DD-MON-YYYY'

表示對的誤解值的工作。

DATE(或TIMESTAMP)不具有任何的格式。

它們以二進制形式存儲在您的列中。格式爲,只有適用於顯示值並將其轉換爲字符字面值。這是您用於顯示值的客戶端應用程序的工作。 SQL * Plus使用NLS設置,其他SQL工具可能使用不同的配置。

+0

感謝您的回覆,我瞭解有關更新和更改表的評論。我道歉,如果我問愚蠢的問題和聲明,我越來越熟悉SQL。你認爲你可以給我一個例子,說明如何在天問題中編寫差異語法。 –

+0

@ChrisPin:我向您展示瞭如何計算天數的差異。 –

+0

@ChrisPin:不要在評論中發佈代碼,編輯你的問題。請閱讀Oracle有關PL/SQL中變量賦值的手冊:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/fundamentals.htm#i16001請參閱我的編輯以獲取一個簡短示例。 –