表结构create table T1  
(  
  PK_ID   NUMBER(8) not null,  
  STARTRQ DATE,  
  ENDRQ   DATE,  
  CONTENT VARCHAR2(100)  
)  

表数据  

T1  
PK_ID    STARTRQ     ENDRQ C     ONTENT     
101      2007-5-1    2007-5-20    记录一   
102      2007-6-1    2007-7-10    记录二    
103      2007-7-17   2007-8-20    记录三    
104      2007-8-27   2007-9-19    记录四  
要求给出任意时间段,查出着段时间内交集的所有内容如给出时间2007-5-5——2007-7-17结果是
PK_ID    STARTRQ     ENDRQ C     ONTENT     
101      2007-5-1    2007-5-20    记录一   
102      2007-6-1    2007-7-10    记录二    
103      2007-7-17   2007-8-20    记录三
自己写的
SELECT CONTENT    
FROM T1   
WHERE startrq   <= to_date(   '2007-5-5 ',    'YYYY-MM-DD ')   
AND endrq   >= to_date(   '2007-7-17 ',    'YYYY-MM-DD ') 查出结果为空,请问怎么会事呢?
   

解决方案 »

  1.   


    SELECT CONTENT FROM T1    
    WHERE startrq>=Date'2007-5-5' and endrq<=Date'2007-7-17'
      

  2.   

    括号反了 ..
    SELECT CONTENT     
    FROM T1    
    WHERE startrq    >= to_date('2007-5-5','YYYY-MM-DD')    
    AND endrq    <= to_date('2007-7-17','YYYY-MM-DD')  
      

  3.   

    mantisXF ,如你所说
    SELECT CONTENT     
    FROM T1    
    WHERE startrq    >= to_date('2007-5-5','YYYY-MM-DD')    
    AND endrq    <= to_date('2007-7-17','YYYY-MM-DD')  结果是
    PK_ID    STARTRQ     ENDRQ C     ONTENT        
    102      2007-6-1    2007-7-10    记录二 

    少了两条记录
        
      

  4.   


    SELECT CONTENT     
    FROM T1    
    WHERE startrq >= to_date('2007-5-5','YYYY-MM-DD')    
    AND startrq <= to_date('2007-7-17','YYYY-MM-DD')
    AND endrq >= to_date('2007-5-5','YYYY-MM-DD')    
    AND endrq <= to_date('2007-7-17','YYYY-MM-DD');
    或者
    SELECT CONTENT     
    FROM T1    
    WHERE startrq between to_date('2007-5-5','YYYY-MM-DD') AND to_date('2007-7-17','YYYY-MM-DD')
    AND endrq between to_date('2007-5-5','YYYY-MM-DD') AND to_date('2007-7-17','YYYY-MM-DD');
      

  5.   

    mantisXF  你好
    你说的被带笼子是什么意思啊?我是新来的,不懂规矩还请见谅,学习中
    对了,上面改过的还是只有那一条记录,我不知道是不是其它问题了
      

  6.   

    前面写错了,因为两个字段过滤条件是并列的关系.
    我测试了是正确的,你试试看~~
    select * 
      from T1 tt
     where tt.STARTRQ >= to_date('2007-5-5','yyyy-mm-dd')
       and tt.STARTRQ <= to_date('2007-7-17','yyyy-mm-dd')
       or tt.ENDRQ >= to_date('2007-5-5','yyyy-mm-dd')
       and tt.ENDRQ <= to_date('2007-7-17','yyyy-mm-dd');   select * 
      from T1 tt
     where tt.STARTRQ between to_date('2007-5-5','yyyy-mm-dd') and  to_date('2007-7-17','yyyy-mm-dd')
       or tt.ENDRQ between to_date('2007-5-5','yyyy-mm-dd') and to_date('2007-7-17','yyyy-mm-dd');
      

  7.   

    在各位的指点下,我改了下,总算出来了,对了mantisXF  你最后该的那两个情况还会少条记录:
    如果表数据是:表数据   
    T1   
    PK_ID    STARTRQ     ENDRQ C     ONTENT      
    101      2007-5-1    2007-5-20    记录一    
    102      2007-6-1    2007-7-10    记录二     
    103      2007-7-17   2007-8-20    记录三     
    104      2007-8-27   2007-9-19    记录四  
    105      2007-7-1    2007-8-1     记录五 最后一条记录出不来
    这是我写的,您在看看,谢谢你了谢谢select * 
      from T1 tt
     where (tt.startrq between to_date('2007-5-5','yyyy-mm-dd')  and to_date('2007-7-17','yyyy-mm-dd'))
      or
        (tt.endrq between to_date('2007-5-5','yyyy-mm-dd')  and to_date('2007-7-17','yyyy-mm-dd'))
       or 
       (to_date('2007-5-5','yyyy-mm-dd') between tt.startrq and tt.endrq)
       or
       (to_date('2007-7-17','yyyy-mm-dd') between tt.startrq and tt.endrq)