通过将日期与当前日期进行比较来选择要更新的特定值

时间:2013-12-09 19:42:06

标签: sql date oracle11g

我正在尝试比较特定日期(在这种情况下是结算日期)并将其与当前日期(SYSDATE)进行比较。任何实际结算日期超过当前日期14天的实体都会将其帐户状态标记为非活动状态。这是代码:

UPDATE CUSTOMERS;
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN

(   SELECT CUST_ID
    FROM BILLING
    WHERE BILLING_DATE IN
         (SELECT TRUNC(SYSDATE) - TRUNC(BILLING_DATE) DAYS FROM BILLING) 
    > 14)

COMMIT;

它不会运行,我不太确定错误在哪里。我正在使用Oracle 11g Express,并通过浏览器,而不是命令行,所以我无法弄清楚哪个确切的行是错误的。任何建议都将不胜感激,谢谢!

编辑:更多信息。 客户表

CREATE TABLE    CUSTOMERS    (
CUST_ID    NUMBER(5),
FIRST_NAME    CHAR(30),
LAST_NAME    CHAR(35),
ADDRESS    CHAR(100),
POSTAL_CODE    CHAR(8),
EMAIL_ADDRESS    VARCHAR2(100),
DATE_REGISTERED    DATE,
DATE_DISCONNECTED    DATE,
REASON_DISC    VARCHAR2(250),
EMPLOYEE_ID    NUMBER(5),
SURVEY_ID    NUMBER(5),
ACCOUNT_STATUS  CHAR(20),
PRIMARY KEY (CUST_ID),
FOREIGN KEY (SURVEY_ID) REFERENCES SURVEY,
FOREIGN KEY (EMPLOYEE_ID) REFERENCES EMPLOYEES

);

样本条目

INSERT INTO CUSTOMERS VALUES (1,'Alan','Abdelkarim','4712 Victorian ',' H3W 2N1','Alan.Abdelkarim@hotmail.com',(to_date('02/01/2012','mm/dd/yyyy')),NULL,NULL,NULL,NULL,'Active');

结算表

CREATE TABLE    BILLING    (
TRANSACTION_ID    NUMBER(5),
PACKAGE_ID    NUMBER(5),
CUST_ID    NUMBER(5),
BILLING_DUE    DATE,
TRANS_TIME    CHAR(5),
TRANS_DATE  Date,
PRIMARY KEY (TRANSACTION_ID),
FOREIGN KEY (PACKAGE_ID) REFERENCES PACKAGES, 
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMERS

);

示例条目

INSERT INTO BILLING VALUES (1,4,1,(to_date('11/15/2013','mm/dd/yyyy')),'8:00',(to_date('11/28/2013','mm/dd/yyyy')));

1 个答案:

答案 0 :(得分:3)

试试这个:

UPDATE CUSTOMERS
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
 (SELECT CUST_ID
    FROM BILLING
    WHERE (TRUNC(SYSDATE) - TRUNC(BILLING_DATE)) > 14
  )
;

COMMIT;