Sql 通过比较日期和当前日期来选择要更新的特定值
我试图比较一个特定的日期(在本例中是账单日期),并将其与当前日期(SYSDATE)进行比较。计费日期超过当前日期14天的任何实体都会将其帐户状态标记为不活动。代码如下:Sql 通过比较日期和当前日期来选择要更新的特定值,sql,date,oracle11g,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) - T
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;
它不会运行,我不太确定错误在哪里。我使用的是Oracle11gExpress,通过浏览器工作,而不是命令行,因此我无法确定哪一行是错误的。如果您有任何建议,我们将不胜感激,谢谢
编辑:更多信息。
客户表
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');
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')));
计费表
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 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');
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')));
试试这个:
UPDATE CUSTOMERS
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
(SELECT CUST_ID
FROM BILLING
WHERE (TRUNC(SYSDATE) - TRUNC(BILLING_DATE)) > 14
)
;
COMMIT;
试试这个:
UPDATE CUSTOMERS
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
(SELECT CUST_ID
FROM BILLING
WHERE (TRUNC(SYSDATE) - TRUNC(BILLING_DATE)) > 14
)
;
COMMIT;
试试这个:
UPDATE CUSTOMERS
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
(SELECT CUST_ID
FROM BILLING
WHERE (TRUNC(SYSDATE) - TRUNC(BILLING_DATE)) > 14
)
;
COMMIT;
试试这个:
UPDATE CUSTOMERS
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
(SELECT CUST_ID
FROM BILLING
WHERE (TRUNC(SYSDATE) - TRUNC(BILLING_DATE)) > 14
)
;
COMMIT;
“不会跑”是什么意思?你有错误吗?如果是,错误是什么?查询是否运行但未能更新您希望它更新的某些行?它是否更新了一些您不希望它更新的行?给我们一些样本数据,告诉我们预期的结果是什么。你可能会发现AskTom网站很有用。这里有一个针对你的问题的特定链接:Sure thing@JustinCave。我添加了create表和客户和账单的示例条目。我所说的“不会运行”是指,当我尝试通过Oracle SQL命令窗口(在浏览器中,而不是命令行中)运行更新时,它无法执行任何操作,并且返回错误消息“ORA-00911-无效字符”。我只是不知道我的语法错误在哪里。你得到的错误是
客户
后面的分号造成的。分号终止语句,您不希望您的UPDATE
语句以UPDATE CUSTOMERS
结尾,因此您不希望在此处使用分号。@这很有帮助,尽管现在我得到的是“ORA-00923 FROM keyword is misplaced”。我试过重新安排,但没有用。从我阅读的内容来看,我的整个子查询可能只是一团混乱,我可能不得不扔掉它。编辑:Nvm,刚刚收到。谢谢你的帮助!“不会跑”是什么意思?你有错误吗?如果是,错误是什么?查询是否运行但未能更新您希望它更新的某些行?它是否更新了一些您不希望它更新的行?给我们一些样本数据,告诉我们预期的结果是什么。你可能会发现AskTom网站很有用。这里有一个针对你的问题的特定链接:Sure thing@JustinCave。我添加了create表和客户和账单的示例条目。我所说的“不会运行”是指,当我尝试通过Oracle SQL命令窗口(在浏览器中,而不是命令行中)运行更新时,它无法执行任何操作,并且返回错误消息“ORA-00911-无效字符”。我只是不知道我的语法错误在哪里。你得到的错误是客户
后面的分号造成的。分号终止语句,您不希望您的UPDATE
语句以UPDATE CUSTOMERS
结尾,因此您不希望在此处使用分号。@这很有帮助,尽管现在我得到的是“ORA-00923 FROM keyword is misplaced”。我试过重新安排,但没有用。从我阅读的内容来看,我的整个子查询可能只是一团混乱,我可能不得不扔掉它。编辑:Nvm,刚刚收到。谢谢你的帮助!“不会跑”是什么意思?你有错误吗?如果是,错误是什么?查询是否运行但未能更新您希望它更新的某些行?它是否更新了一些您不希望它更新的行?给我们一些样本数据,告诉我们预期的结果是什么。你可能会发现AskTom网站很有用。这里有一个针对你的问题的特定链接:Sure thing@JustinCave。我添加了create表和客户和账单的示例条目。我所说的“不会运行”是指,当我尝试通过Oracle SQL命令窗口(在浏览器中,而不是命令行中)运行更新时,它无法执行任何操作,并且返回错误消息“ORA-00911-无效字符”。我只是不知道我的语法错误在哪里。你得到的错误是客户
后面的分号造成的。分号终止语句,您不希望您的UPDATE
语句以UPDATE CUSTOMERS
结尾,因此您不希望在此处使用分号。@这很有帮助,尽管现在我得到的是“ORA-00923 FROM keyword is misplaced”。我试过重新安排,但没有用。从我阅读的内容来看,我的整个子查询可能只是一团混乱,我可能不得不扔掉它。编辑:Nvm,刚刚收到。谢谢你的帮助!“不会跑”是什么意思?你有错误吗?如果是,错误是什么?查询是否运行但未能更新您希望它更新的某些行?它是否更新了一些您不希望它更新的行?给我们一些样本数据,告诉我们预期的结果是什么。你可能会发现AskTom网站很有用。这里有一个针对你的问题的特定链接:Sure thing@JustinCave。我添加了create表和客户和账单的示例条目。我所说的“不会运行”是指,当我尝试通过Oracle SQL命令窗口(在浏览器中,而不是命令行中)运行更新时,它无法执行任何操作,并且返回错误消息“ORA-00911-无效字符”。我只是不知道我的语法错误在哪里。你得到的错误是客户
后面的分号造成的。分号终止语句,您不希望您的UPDATE
语句以UPDATE CUSTOMERS
结尾,因此您不希望在此处使用分号。@这很有帮助,尽管现在我得到的是“ORA-00923 FROM keyword is misplaced”。我试过重新安排,但没有用。从我阅读的内容来看,我的整个子查询可能只是一团混乱,我可能不得不扔掉它。编辑:Nvm,刚刚收到。谢谢你的帮助!是的,就是这个。非常感谢。是的,就是这个。非常感谢。是的,就是这个。非常感谢。是的,就是这个。非常感谢。