SQL Query提供缺少的括号错误

Jim*_*Jim 1 sql oracle

我已经研究了几天,无法弄清楚错误在哪里.查询是:

Select distinct p.PkgID, p.PkgName, p.PkgCost, c.CustFName || ' ' || c.CustLName as   "CUSTOMERNAME" 
FROM Subscription s, Package p, Customer c
WHERE p.PkgID = s.PkgID
AND c.CustID = s.CustID     
AND to_date 
 (s.StartDate, 'Mon DD, YYYY')=
to_date 
 (&StartDate, 'Mon DD, YYYY')
ORDER BY p.PkgID;
Run Code Online (Sandbox Code Playgroud)

我一直在:

SQL错误:ORA-00907:缺少右括号00907. 00000 - "缺少右括号".

我找不到问题.任何帮助将非常感激.这是table和insert语句的样子.

CREATE TABLE SUBSCRIPTION
(
SubID NUMBER(5) NOT NULL CONSTRAINT SUBSCRIPTION_SubID_PK PRIMARY KEY,
StartDate DATE NOT NULL,
EndDate DATE NOT NULL,
CustID NUMBER(5) NOT NULL,   
PkgID NUMBER(5) NOT NULL  
 );

ALTER TABLE SUBSCRIPTION ADD CONSTRAINT SUBSCRIPTION_CustID_FK FOREIGN KEY (CustID)     REFERENCES CUSTOMER (CustID);
ALTER TABLE SUBSCRIPTION ADD CONSTRAINT SUBSCRIPTION_PkgID_FK FOREIGN KEY (PkgID) REFERENCES PACKAGE (PkgID);

INSERT INTO SUBSCRIPTION
VALUES (010, to_date('Jan 01, 2010 11:30','Mon DD, YYYY hh24:mi'), to_date('Jan 01,   2013 14:30','Mon DD, YYYY hh24:mi'), 00001, 10101);
INSERT INTO SUBSCRIPTION
VALUES (015,to_date('Mar 01, 2012 17:00','Mon DD, YYYY hh24:mi'), to_date('Dec 05, 2012 17:00','Mon DD, YYYY hh24:mi'), 00002, 20202);
Run Code Online (Sandbox Code Playgroud)

作为旁注,我也是这样尝试的:

Select distinct p.PkgID, p.PkgName, p.PkgCost, c.CustFName || ' ' || c.CustLName as   "CUSTOMERNAME" 
FROM Subscription s
        Left OUTER JOIN Package p on p.PkgID = s.PkgID
    Left OUTER JOIN Customer c on c.CustID = s.CustID       
WHERE to_date (s.StartDate, 'Mon DD, YYYY')=
to_date (&StartDate, 'Mon DD, YYYY')    
ORDER BY p.PkgID;
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 5

输入TO_DATE()是两个字符串; 即使你使用SQL*Plus替换变量,你仍然需要强制执行此操作.

更改

AND to_date(s.StartDate, 'Mon DD, YYYY') = to_date(&StartDate, 'Mon DD, YYYY')
Run Code Online (Sandbox Code Playgroud)

AND to_date(s.StartDate, 'Mon DD, YYYY') = to_date('&StartDate', 'Mon DD, YYYY')
Run Code Online (Sandbox Code Playgroud)

你确定s.StartDate是这种格式的角色吗?听起来它已经是一个约会(我希望),在这种情况下你不需要,TO_DATE()TRUNC()在日期删除时间部分可能是值得的.


要根据评论编辑我的答案,我不相信你已经以正确的方式改变了这一点.它应该是:

AND trunc(s.StartDate) = to_date('&StartDate', 'Mon DD, YYYY')
Run Code Online (Sandbox Code Playgroud)

注意TRUNC()'周围'&StartDate'