select * from tab_message where 
((f_year='2001' and f_month>'07') or f_year>'2001') 
and ((f_year='2003' and f_month<'05') or f_year<'2003')

解决方案 »

  1.   

    SQL> desc tab_mes
     Name                                      Null?    Type
     ----------------------------------------- -------- ------------------
     F_YEAR                                             VARCHAR2(10)
     F_MONTH                                            VARCHAR2(10)
     F_MESSAGE                                          VARCHAR2(50)SQL> select * from tab_mes;F_YEAR     F_MONTH    F_MESSAGE
    ---------- ---------- ------------------------------
    2001       04         dsfsd
    2001       07         fsdf
    2001       11         dgasdg
    2002       01         sdsdsd
    2002       02         aaaa
    2002       04         sddddd
    2002       09         sdssd
    2002       11         sdssdds
    2002       12         sdsds
    2003       01         sdsdsd
    2003       03         sdsdsd
    2003       05         ffsdf
    2003       08         iiii13 rows selected.SQL> select * from tab_mes
      2  where f_year||f_month between '200107' and '200305';F_YEAR     F_MONTH    F_MESSAGE
    ---------- ---------- ------------------------------
    2001       07         fsdf
    2001       11         dgasdg
    2002       01         sdsdsd
    2002       02         aaaa
    2002       04         sddddd
    2002       09         sdssd
    2002       11         sdssdds
    2002       12         sdsds
    2003       01         sdsdsd
    2003       03         sdsdsd
    2003       05         ffsdf11 rows selected.
      

  2.   

    SQL> select * from tab_mes
      2  where f_year||f_month>'200107' and f_year||f_month<'200305';F_YEAR     F_MONTH    F_MESSAGE
    ---------- ---------- ------------------------------
    2001       11         dgasdg
    2002       01         sdsdsd
    2002       02         aaaa
    2002       04         sddddd
    2002       09         sdssd
    2002       11         sdssdds
    2002       12         sdsds
    2003       01         sdsdsd
    2003       03         sdsdsd9 rows selected.
      

  3.   

    select * from tab_message where trunc(to_date(f_year,'yyyy'),'yyyy') between to_date('2001-7','yyyy-mm') and to_date('2003-5','yyyy-mm');
      

  4.   

    zzok1() 的写法是比较恰当的!