我想问一下如何检查两个日期之间的差异。
BillingDate,这是一个日期类型,条目为“DD-MON-YYYY”
,另一个日期是当前日期。
sys_date - BillingDate = daysFromBilled
我发现很多例子他们确实说明了计算差异的第二个日期,但我要找的是当前日期之间的差异,所以我可以将它添加到日程表或工作中。
我正在使用oracle btw。
要添加的另一点,我将继续搜索,但如果您也可以推荐,我应该如何实现这样的功能:
这是我粗略的表格布局
Cust Billing
-------- ----------
CustID(PK) BillingID(PK)
LateStatus LateStatus
Service BillingDate
CustID
非常感谢。
更新
REPLACE视图DateDifference as select trunc(sysdate) - trunc(BillingDate) 来自Billing;
似乎是合法的。
答案 0 :(得分:1)
只需从另一个中减去一个日期:
BillingDate - sysdate
要在select语句中执行此操作,只需使用它:
select billingdate - sysdate as daysFromBilled
from ...
在触发器中使用常规赋值运算符:
declare
daysFromBilled integer;
begin
daysFromBilled := :new.billingdate - sysdate;
...
将返回天数,包括时间不同时的小数值(Oracle中的DATE
列也包含时间!)。
如果你只想要整天,请使用:
trunc(BillingDate) - trunc(sysdate)
你的陈述:
日期类型,条目为“DD-MON-YYYY”
表示对DATE
值的工作方式存在误解。
DATE
(或TIMESTAMP
) 不 有任何格式。
它们以二进制形式存储在您的列中。显示值时将应用 格式,从而将其转换为字符文字。这是您用于显示值的客户端应用程序的工作。 SQL * Plus使用NLS设置,其他SQL工具可能使用不同的配置。
答案 1 :(得分:0)
所有客户:
SELECT CUSTID
FROM BILLING
WHERE (SYSDATE - Billing_Date) >= 60
;
以下声明应更新差异为60天及以上的所有客户记录。此外,还添加了一个子句来检查服务是否先前未设置为CUT,因此您不会每次都更新相同的记录。
UPDATE CUST_TABLE
SET SERVICE = 'CUT'
WHERE CustID in ( SELECT CustID
FROM BILLING_TABLE
WHERE (Sysdate - Billing_Date) >= 60
)
AND NVL(SERVICE, 'X') != 'CUT'
;