选择两年之间的日期



我有两个表:

  • 人(身份证件、姓名、年龄(
  • 租金(身份证、日期、期限(

注意:表"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';

如果您善意地将CREATEINSERT语句添加到您的下一篇文章中,您将增加某人找到正确答案的机会......

在这里,您有另一种解决方案。

使用连接:

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;

最新更新