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年租赁活动超过一次的人员将通过加入进行复制。