PL/SQL 函数返回日期之间的数据
Posted
技术标签:
【中文标题】PL/SQL 函数返回日期之间的数据【英文标题】:PL/SQL Function to return data between dates 【发布时间】:2015-11-30 11:27:17 【问题描述】:我在创建函数时遇到问题..
我希望该功能可以查找某个帐户在某个日期的租金。
该函数有2个参数rentacc(number)和rentdate(varchar2)
create or replace function get_rent(rentacc in number,rentdate in varchar2)
return number
as
atype number :=rentacc
begin
if atype =1
then
select "RATE" from "RENTCHANGE" where TO_DATE(rentdate, 'YYYY-MM-DD') >= TIME or TO_DATE(rentdate, 'YYYY-MM-DD') <=TIME;
else return -1;
end if;
end get_rent;
这是我的桌子租金变化
ID ACOUNT RATE TIME
---------- ---------- ---------- ----------
123 1 ,58 2013-07-09
124 1 ,69 2013-09-02
125 1 1,78 2013-10-07
126 1 2,7 2013-10-17
select function_name(1,20131010)
from dual;
会回来
function_name
-------------------------
1,78
如果有人有任何建议,我将不胜感激。 谢谢。
【问题讨论】:
您确定该功能是列出的功能吗? 不确定我是否关注 【参考方案1】:您的问题令人困惑,因为您的示例数据和函数使用不同的列名等。
无论如何,这里有一个 SQL 语句,可以帮助您了解如何修改函数中的查询:
with rentchange as (select 123 id, 1 account, .58 rate, to_date('09/07/2013', 'dd/mm/yyyy') time from dual union all
select 124 id, 1 account, .69 rate, to_date('02/09/2013', 'dd/mm/yyyy') time from dual union all
select 125 id, 1 account, 1.78 rate, to_date('07/10/2013', 'dd/mm/yyyy') time from dual union all
select 126 id, 1 account, 2.7 rate, to_date('17/10/2013', 'dd/mm/yyyy') time from dual)
-- end of mimicking the rentchange table with data in it. See SQL below:
select rate
from (select id,
account,
rate,
time start_time,
lead(time, 1, sysdate) over (partition by account
order by time) end_time
from rentchange)
where start_time <= to_date('10/10/2013', 'dd/mm/yyyy')
and end_time > to_date('10/10/2013', 'dd/mm/yyyy');
RATE
----------
1.78
这使用了 Lead() 分析函数来提取有关下一行日期的信息(或者,如果没有下一行,则使用当前时间),然后为您提供可以查询的日期范围。
【讨论】:
但如果我想在我的表中再插入 100 行,我必须更改我的函数。这不是可选的吗? @ErikRehn 如果您谈论的是我用来生成数据以在 sql 的主要位中运行的rentchange 子查询,那么我希望您意识到您不需要它。由于您没有充分解释您的功能应该做什么以及如何使用它,因此几乎不可能说您是否需要更改它。我认为,如果您只想为一个特定帐户进行选择,那么您可能一开始就没有很好地设计它! 所以你在哪里声明 start 和 stop_time 我会改用我的参数? 嗯,不;这些是查询中的列;它是to_date('10/10/2013', 'dd/mm/yyyy')
将被参数替换。【参考方案2】:
这可能是你需要的,比以前的帖子更简单!
create or replace function get_ränta(
p_kontotyp in number,
p_datum in varchar2)
return number
is
v_svar number(5,2);
begin
select ränta into v_svar
from ränteändring
where tid = (select max(tid) from ränteändring
where tid <= to_date(p_datum, 'yyyy,mm,dd')
and ktyp = p_kontotyp);
return v_svar;
exception
when no_data_found then
return -1;
end;
【讨论】:
哇!非常好。干得好以上是关于PL/SQL 函数返回日期之间的数据的主要内容,如果未能解决你的问题,请参考以下文章