oracle返回返回年,Oracle根据返回不一致结果的年份选择日期

我遇到了我修改的Oracle视图的一个特殊问题。这个想法是我有一个存储所有选举候选人的基础表,并且还有一个选举日期栏,告诉我们这个候选人是什么选举的一部分,就像这样。Oracle根据返回不一致结果的年份选择日期

NAME | ELECTION_DATE

---------------------------

John Smith | 01-APR-2011

Alan Cooper| 02-MAY-2013

ELECTION_DATE列存储为日期。我们构建了2次,2011年和2013年,使用以下statment 2011年

where election_date >= to_date(2011,'yyyy') and election_date < to_date(2012,'yyyy')

其中我们认为会捡起刚刚约翰·史密斯的记录之上,但事实并非如此。特别的是,当我们为2013年的观点做这件事时。

where election_date >= to_date(2013,'YYYY') and election_date < to_date(2014,'YYYY')

它只能得到Alan Cooper的记录。更奇特的是,如果我们为2011年的观点这样做了。

where election_date >= to_date(2010,'yyyy') and election_date < to_date(2011,'yyyy')

我们得到的只是约翰史密斯的记录,而不是Alan Cooper的记录,这是我们想要的,但不是我们所期望的。

然后,我们改变了他们之间的陈述和他们的表现完全一样,即2010年至2011年获得约翰史密斯唱片,2011年至2012年之间一无所获,2013年至2014年获得了Alan Cooper唱片。

虽然我正在写这篇文章,但我的同事设法通过使用这个更明确的声明来解决它。

where election_date between '01-JAN-2011' AND '01-JAN-2012'

但我仍然想知道为什么上述说法仍然如此奇怪?我错过了几年使用to_date函数可能吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库,PL/SQL提供了存储函数(Stored Function)来处理数据并返回单个值,例如一个数字、日期或者字符串等。但如果你需要从函数返回一组结果集,即类似多个记录的集合,你需要使用一些特定的方法,因为PL/SQL函数默认不能直接返回结果集。 在较新版本的Oracle,你可以使用以下方法之一来返回结果集: 1. 使用`SYS_REFCURSOR`:`SYS_REFCURSOR`是一个指向PL/SQL查询结果集的指针。你可以创建一个函数,返回`SYS_REFCURSOR`类型,然后在该函数内部执行SQL查询并打开`SYS_REFCURSOR`。调用者可以通过这个返回的`SYS_REFCURSOR`来检索查询结果。 2. 使用` PIPELINED`表函数:这是一种特殊类型的函数,能够返回一个表类型的集合。通过定义`PIPELINED`函数,你可以在函数内部逐行返回数据,这使得函数可以返回一个可迭代的集合,就像操作普通表一样。 下面是一个使用`SYS_REFCURSOR`返回结果集的简单例子: ```sql CREATE OR REPLACE FUNCTION get_employees RETURN SYS_REFCURSOR AS ref_cursor SYS_REFCURSOR; BEGIN OPEN ref_cursor FOR SELECT * FROM employees; RETURN ref_cursor; END; ``` 调用这个函数: ```sql DECLARE ref_cursor SYS_REFCURSOR; v_employee employees%ROWTYPE; BEGIN ref_cursor := get_employees(); LOOP FETCH ref_cursor INTO v_employee; EXIT WHEN ref_cursor%NOTFOUND; -- 处理每一行数据 DBMS_OUTPUT.PUT_LINE(v_employee.employee_id || ', ' || v_employee.last_name); END LOOP; CLOSE ref_cursor; END; ``` 在实际应用,你可能需要根据具体需求来选择最适合的方法来返回结果集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值