我有两张桌子:
注意:ID
表格Rents
&#39}是那个人的ID
。
我需要在2007年找到有租金的人。
我的查询:
select *
from person
natural join rent
where date(DATE, 'yyyy') > date(2006, 'yyyy')
and date(DATE, 'yyyy') < date(2008, 'yyyy');
但是我收到以下错误消息:
ORA-00936:缺少表达式
00936. 00000 - &#34;缺少表达&#34;
*原因:
*动作:行错误:10列:98
答案 0 :(得分:0)
您可以在此处使用YEAR
功能:
SELECT p.*
FROM person p
WHERE EXISTS (SELECT 1 FROM rent r WHERE p.ID = r.ID AND
EXTRACT(YEAR FROM r.date) = 2007)
这将使所有在2007日历年中至少有一次租金活动的人返回。如果你想要别的东西,那么也许你应该向我们展示一些数据。
答案 1 :(得分:0)
错误是date(DATE, 'yyyy')
中的内部日期变量,内部日期方法需要一些参数。我想你想在这个功能中拥有当前日期?然后使用:
date(CURRENT_DATE, 'yyyy')
答案 2 :(得分:0)
欢迎使用Stackoverflow!
您有三种选择:
CREATE TABLE person (id NUMBER PRIMARY KEY, name VARCHAR2(50), age NUMBER);
CREATE TABLE rents (id REFERENCES person(id), rent_date DATE, duration NUMBER);
INSERT INTO person (id, name) VALUES (1, 'Donald');
INSERT INTO person (id, name) VALUES (2, 'Dagobert');
INSERT INTO rents (id, rent_date) VALUES (1, DATE '2018-08-03');
INSERT INTO rents (id, rent_date) VALUES (2, DATE '2017-05-02');
SELECT *
FROM person
JOIN rents USING (id)
WHERE EXTRACT(YEAR FROM rents.rent_date) = 2017;
SELECT *
FROM person
JOIN rents USING (id)
WHERE TO_CHAR(rents.rent_date,'YYYY') = '2017';
SELECT *
FROM person
JOIN rents USING (id)
WHERE rents.rent_date BETWEEN DATE '2017-01-01' AND DATE '2017-12-31';
如果您将CREATE
和INSERT
语句添加到下一篇文章中,您将增加某人找到正确答案的机会......
答案 3 :(得分:0)
这里有另一种解决方案。
加入:
select p.*
from persons p
join rents r on p.id = r.id
where extract(year from r.date) = 2007;
没有加入:
select p.*
from persons p, rents r
where p.id = r.id and extract(year from r.date) = 2007;