从存储过程传入参数
id number,
startdate varchar2,enddate varchar2,  --开始、结束时间 yyyy-mm-dd 如 2000-12-12  2000-12-13
starthour varchar2,endhour varchar2,  --开始、结束时间 hh:00:00 如 18:00:00 19:00:00
startsecond varchar2,endsecond varchar2 --最少、最多秒数 两个数字 如 11 20表:    tableA
字段:   id  starttime                      endtime
如       1    2000-12-12 12:22:22           2000-12-12 12:22:30
         2    2000-12-12 12:22:22           2000-12-13 18:22:30要求: starttime,endtime 的范围符合 date、hour、second,即以上传入参数范围
即 starttime 和endtime 的日期要在startdate和enddate之间,小时数要在starthour和endhour之间,
秒数差要在startsecond和endsecond之间。
具体该怎么写?请赐教。

解决方案 »

  1.   

    select * from tableA where id like nvl(id,'%') and to_char(starttime,'yyyy-mm-ddhh24:mi:ss')>=nvl(startdate,'1111-11-11')||nvl(starthour,'00:00:00') and to_char(endtime,'yyyy-mm-ddhh24:mi:ss')<=nvl(enddate,'1111-11-11')||nvl(endhour,'00:00:00') and to_char(endtime,'ss')-to_char(starttime,'ss')>=nvl(startsecond,'00') and to_char(endtime,'ss')-to_char(starttime,'ss')<=nvl(endsecond,'61');
      

  2.   

    select * from tableA 
    where starttime between to_date(startdate||starthour,'yyyy-mm-ddhh24:mi:ss') and to_date(enddate||endhour,'yyyy-mm-ddhh24:mi:ss')
    and endtime between to_date(startdate||starthour,'yyyy-mm-ddhh24:mi:ss') and to_date(enddate||endhour,'yyyy-mm-ddhh24:mi:ss')
    and (endtime-starttime)*24*60*60 between startsecond and endsecond
      

  3.   

    1楼会报缺少into?
    3楼to_date(enddate||endhour,'yyyy-mm-ddhh24:mi:ss') 也会报错?
      

  4.   

    1.你要的是sql还是pl/sql,把需求在讲详细些
    2.你给的参数可否为空
    3.我写的那个sql最后取秒数理解错了,正确的你参照3楼的写法