select xxx from CmGeneral as cg where cg.effectDate <= '"+date+"' and cg.expireDate >='"date"'effectDate和expireDate 在oracle中都是Date类型,我传入的参数也是java.util.Date()类型.
现在的问题是:只能取出来date大于effectDate,小于expireDate的所有数据,而如果数据库中effectDate为null,expireDate条件成立的记录就取不出来,怎么取这些数据?是否要用decode函数,怎么用?谢谢了.

解决方案 »

  1.   

    SELECT xxx
      FROM cmgeneral cg
     WHERE (cg.effectdate <= p_date OR cg.effectdate IS NULL)
       AND cg.expiredate >= p_date;
      

  2.   

    SELECT xxx
      FROM cmgeneral cg
     WHERE nvl(cg.effectdate,p_date) <= p_date AND nvl(cg.expiredate,p_date) >= p_date;
      

  3.   

    KingSunSha(弱水三千) ( ) is ok, thank u 
    waterfirer(水清) ( ) 会报错,期望是数值型而得到的是非数值型,是不是nvl只能处理数值形的东西??????????????
      

  4.   

    你的p_date是什么类型?日期类型我试过,不会报错
      

  5.   

    如果p_date是字符型,把cg.effectdate转换一下,to_char(cg.effectdate,'p_date的格式')
    时间类型和字符串类型在格式相同的时候是可以比较的,但如果用nvl那就要类型一致了