下面这段代码是oracle中用于取得'20090401'到'20090430'间所有日期的SQL,现在我们需要一个mySQL的,由于本人实在不会mySQL,同时时间又紧,所以希望各位帮忙看看,mySQL下这个SQL怎么写!
select to_date('20090401', 'yyyymmdd') + level - 1 as dayofyear
  from dual
connect by level <= to_char(to_date('20090430', 'yyyymmdd'), 'ddd')

解决方案 »

  1.   

    先生成一个序号表Numbers
    num
    1
    2
    3
    ..
    ...
    SELECT DATE_ADD('20090401',INTERVAL num-1 DAY) AS `date`
    FROM Numbers 
    WHERE DATE_ADD('20090401',INTERVAL num-1 DAY)<='20090430';
      

  2.   

    谢谢liangCK!
    但,我给的oracle的SQL是以一个月为例,可是实际使用的时候可能是很长的时间段,所以用序号表Numbers
    好像不大好,因为不好确定Numbers的最大值
      

  3.   

    那用循环插入呗..delimiter $$
    drop procedure if exists report_date $$create procedure report_date(start_date date,end_date date)
    begin
        declare i int default 0;
        create temporary table date_tb(`date` date) engine=memory;    while(date_add(start_date,interval i day) <= end_date) do
            insert into date_tb values(date_add(start_date,interval i day));
            set i=i+1;
        end while;    select * from date_tb;end$$
    delimiter ;
      

  4.   

    CALL report_date('20090401','20090430');
      

  5.   

    由于MySQL中没有connect这个层次查询,(没有几个数据库支持这种除了oracle),所以只能按照楼上的方法来通过store procedure 来实现了。http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html
      

  6.   

    直接在SP中循环:
    set @i='2009-04-01';
    while @i<='2009-04-30' do
    set @i=date_add(@I,interval 1 day);
    select @i;
    end while;