SELECT *
  FROM PO_HEADERS
  WHERE (TO_CHAR(PURCHASEDATE,'YYYY/MM/DD') BETWEEN DATE1 AND DATE2);
 
当变量DATE1和DATE2有值时,则是上述语法所抓出的资料
当变量DATE1和DATE2为’’时,抓出TABLE PO_HEADERS的所有资料
这两个条件都存在时要怎样写这个语句

解决方案 »

  1.   

    try:SELECT *
      FROM PO_HEADERS
      WHERE (TO_CHAR(PURCHASEDATE,'YYYY/MM/DD') 
    BETWEEN nlv(DATE1,to_date('1900-01-01','yyyy-mm-dd') 
    AND nvl(DATE2,to_date('9999','yyyy')));
      

  2.   

    SELECT *
      FROM PO_HEADERS
      WHERE (TO_CHAR(PURCHASEDATE,'YYYY/MM/DD') BETWEEN DATE1 AND DATE2)
          or (DATE1 is null and DATE2 is null and 1=1)
      

  3.   

    楼上licsth()的语句中多了个1=1
    如果date1和date2都是型如'YYYY/MM/DD'的字符串,并且PURCHASEDATE上有索引,那么用下面的语句更好
    SELECT *
      FROM PO_HEADERS
      WHERE (PURCHASEDATE BETWEEN to_date(nvl(DATE1,'1999/1/1'),'YYYY/MM/DD') AND to_date(nvl(DATE2,'1999/1/1','YYYY/MM/DD') )
         or (date1 is null and date2 is null);
      

  4.   

    先来一点:
    select a.* from PO_HEADERS a,
      

  5.   

    继续:
    (select count(*) as cou1 from po_headers where date1 is null and date2 is null] y  where  (to_char(a.purchasedate,'yyyy/mm/dd') between a.date1 and a.date2 and y.cou1=0)