选择两年之间的日期

时间:2018-05-28 09:09:40

标签: sql oracle

我有两张桌子:

  • 人(身份证,姓名,年龄)
  • 租金(ID,DATE,DURATION)

注意: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

4 个答案:

答案 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';

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

答案 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;