如何写一个函数返回时间区间里的每一天

Richard345265669 2010-03-10 01:55:04
遇到这样一个问题,假如传入两个日期,比如3月1日和3月5日,要求输出
3月2日,
3月3日,
3月4日
好像
select date from table where 传入日期2-传入日期1,但是不知道怎么写,一定要建个表把所有的日期存起来吗??
...全文
239 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adebayor 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 happy81626739 的回复:]
SQL code--开始日期 '2009-03-01'
--结束日期 '2009-03-10'

SELECT LEVEL + DATE '2009-03-01' - 1
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
谁解释一下这段代码啊??
[/Quote]
就是从dual表中去查询时间
connect by的意思是 从level=1开始 到结束时间与起始时间的时间差+1天结束
循环输出LEVEL + DATE '2009-03-01' - 1 结果就是从起始时间开始到结束时间为止的时间结果集
Happy81626739 2010-03-12
  • 打赏
  • 举报
回复
SQL code--开始日期 '2009-03-01'
--结束日期 '2009-03-10'

SELECT LEVEL + DATE '2009-03-01' - 1
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
谁解释一下这段代码啊??
yhuib 2010-03-10
  • 打赏
  • 举报
回复
引用 7 楼 tangren 的回复:
SQL code--转换成X月X日SELECTltrim(to_char(LEVEL+ DATE'2009-03-01'-1,'mm'),'0')||'月'||ltrim(to_char(LEVEL+ DATE'2009-03-01'-1,'dd'),'0')||'日'FROM dual
CONNECTBYLEVEL< DATE'2009-03-10'- DATE'2009-03-01'+2;

很经典
csuxp2008 2010-03-10
  • 打赏
  • 举报
回复
引用 7 楼 tangren 的回复:
SQL code--转换成X月X日SELECTltrim(to_char(LEVEL+ DATE'2009-03-01'-1,'mm'),'0')||'月'||ltrim(to_char(LEVEL+ DATE'2009-03-01'-1,'dd'),'0')||'日'FROM dual
CONNECTBYLEVEL< DATE'2009-03-10'- DATE'2009-03-01'+2;


这个方法确实很经典
tangren 2010-03-10
  • 打赏
  • 举报
回复
--转换成X月X日
SELECT ltrim(to_char(LEVEL + DATE '2009-03-01' - 1, 'mm'), '0') || '月' ||
ltrim(to_char(LEVEL + DATE '2009-03-01' - 1, 'dd'), '0') || '日'
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
vc555 2010-03-10
  • 打赏
  • 举报
回复
OPER@XE> create or replace procedure test_p(vd1 varchar2,vd2 varchar2)
2 as
3 get_date1 date;
4 get_date2 date;
5 cnt number;
6 begin
7 get_date1:=to_date(vd1,'yyyymmdd')+1;
8 get_date2:=to_date(vd2,'yyyymmdd')-1;
9 cnt:=trunc(get_date2-get_date1);
10 for i in 0..cnt loop
11 dbms_output.put_line(get_date1+i);
12 end loop;
13 end;
14 /

过程已创建。

OPER@XE> exec test_p('20100301','20100305')
2010-03-02
2010-03-03
2010-03-04

PL/SQL 过程已成功完成。
tangren 2010-03-10
  • 打赏
  • 举报
回复
--开始日期 '2009-03-01'
--结束日期 '2009-03-10'

SELECT LEVEL + DATE '2009-03-01' - 1
FROM dual
CONNECT BY LEVEL < DATE '2009-03-10' - DATE '2009-03-01' + 2;
Richard345265669 2010-03-10
  • 打赏
  • 举报
回复
引用 3 楼 csuxp2008 的回复:
循环使用dbms_output.put_line()来输出每一天即可

具体呢??
csuxp2008 2010-03-10
  • 打赏
  • 举报
回复
循环使用dbms_output.put_line()来输出每一天即可
Richard345265669 2010-03-10
  • 打赏
  • 举报
回复
数字就可以了,TKS!
vc555 2010-03-10
  • 打赏
  • 举报
回复
输入格式如何,要用中文,还是0301,0305

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧