数据库是10g ,在商品信息表中有商品有效时间。开始时间starttime和结束时间endTimecreate table TB_TEST
(
  ID        INTEGER not null,
  STARTTIME VARCHAR2(20) not null,
  ENDTIME   VARCHAR2(20) not null
);
insert into tb_test(id,starttime,endtime)
values(1,'09:00','22:00');
insert into tb_test(id,starttime,endtime)
values(2,'23:00','05:00');
commit;
问题: 
   现在要查询出当前时间在其有效时间范围内的数据,对于同一天的好处理,但对于跨天的该如何处理?
   这个sql该怎么写?或者是用存储过程来实现么?   求思路,求答案 ,,,谢谢

解决方案 »

  1.   

    判断:
    如果starttime-endtime>0 表示就是有隔天,<0 就是当天!
      

  2.   

    LZ看看这是你要的吗
    SELECT *
      FROM TB_TEST
     WHERE TO_DATE(TO_CHAR(SYSDATE, 'yyyymmdd') || ' ' || STARTTIME,
                   'yyyymmdd hh24:mi') <= SYSDATE
       AND TO_DATE(CASE WHEN STARTTIME > ENDTIME THEN
                   TO_CHAR(SYSDATE, 'yyyymmdd') ELSE
                   TO_CHAR(SYSDATE + 1, 'yyyymmdd') END || ' ' || ENDTIME,
                   'yyyymmdd hh24:mi') > SYSDATE
      

  3.   

    你必须明确给出跨天的判断条件,不能简单的按照 endtime-starttime<0 来判断。
    因为根据你给出的条件,我可以认为 第一条记录是 第一天 9:00 开始 第二天22:00结束,也跨天了。所以跨天条件是解决这个问题的关键,而跨天条件应该属于你的业务规定了,先明确一下。