Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择两年之间的日期_Sql_Oracle - Fatal编程技术网

Sql 选择两年之间的日期

Sql 选择两年之间的日期,sql,oracle,Sql,Oracle,我有两张桌子: 人员(身份证、姓名、年龄) 租金(ID、日期、期限) 注意:ID表'中的ID是此人的ID 我需要找到2007年有租金的人 我的问题是: select * from person natural join rent where date(DATE, 'yyyy') > date(2006, 'yyyy') and date(DATE, 'yyyy') < date(2008, 'yyyy'); 选择* 从个人 自然租金 其中日期(date,'yyyy'

我有两张桌子:

  • 人员(身份证、姓名、年龄)
  • 租金(ID、日期、期限)
注意:
ID
表'
中的
ID
是此人的
ID

我需要找到2007年有租金的人

我的问题是:

select * 
from person 
natural join rent 
where date(DATE, 'yyyy') > date(2006, 'yyyy') 
  and date(DATE, 'yyyy') < date(2008, 'yyyy');
选择*
从个人
自然租金
其中日期(date,'yyyy')>date(2006,'yyyy'))
和日期(日期,'yyyy')<日期(2008,'yyyy');
但我收到以下错误消息:

ORA-00936:缺少表达式
93600000-“缺少表达式”
*原因:
*操作:第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,'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;

日期
是什么数据类型?您使用的是哪个数据库和版本?我很困惑…我认为函数
YEAR()
在Oracle中不存在。使用
EXTRACT(YEAR FROM…
@Tim,请帮助我,我在Oracle中找不到
YEAR
函数。这是什么数据库/版本?@WernfriedDomscheit Google,有用信息的黑洞:@Tim,我该怎么用谷歌搜索一个叫做
年的东西呢?JavaDB是否会生成“ORA-00936”错误?该链接引用了JavaDB,在任何地方都会提到它。当然,我只是坚持使用OP的连接来整理错误消息
DISTINCT
如果一年中有两次租金,将不会有多大帮助。我会用你的
选择。。。如果OP只需要一个具有租赁活动的独特人员列表,那么您可能需要
选择DISTINCT
。2007年租赁活动超过一次的人员将通过加入进行复制。