我有两个表:
- 人(身份证件、姓名、年龄(
- 租金(身份证、日期、期限(
注意:表"Rents
"中的ID
是该人的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 - "缺少表达式">
*原因:*操作:行错误:10 列:
98
你可以在这里只使用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日历年至少有一次租金活动的人返回。 如果您想要其他东西,那么也许您应该向我们展示一些数据。
错误是内部 Date 变量date(DATE, 'yyyy')
内部日期方法需要一些参数。我想你想在这个函数中有当前日期吗?然后使用:
date(CURRENT_DATE, 'yyyy')
欢迎来到 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
语句添加到您的下一篇文章中,您将增加某人找到正确答案的机会......
在这里,您有另一种解决方案。
使用连接:
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;