比如数据库有个字段 yearMonth
都是2007-01,2007-02,2007-03,2007-05这样的数据
程序里传入参数2007-03
我要把yearMonth等于2007-01,2007-02,2007-03的三条数据搜出来,sql的where条件怎么写

解决方案 »

  1.   

    这个只要简单的修改语句即可.
    譬如表格叫Ytab,
    select * from Ytab where YearMonth bwtween iYearMonth 
           and to_char(add_months(to_date(iYearMonth,'yyyy-mm'),-2),'yyyy-mm');
      

  2.   

    如果yearMonth 是字符型的話就
    WHERE yearMonth IN (TO_CHAR(ADD_MONTHS(to_date('200703','yyyy-mm'),-1),'YYYY-MM'),ADD_MONTHS(to_date('200703','yyyy-mm'),-2),'YYYY-MM'),'2007-03')
      

  3.   

    WHERE   yearMonth  BETWEEN '2007-03' AND TO_CHAR(ADD_MONTHS(to_date('200703','yyyy-mm'),-2)
      

  4.   

    SQL> CREATE TABLE MYTEST(YEARMONTH NVARCHAR2(30));Table createdSQL> INSERT INTO MYTEST SELECT '2007-01' FROM DUAL
      2  UNION SELECT '2007-02' FROM DUAL
      3  UNION SELECT '2007-03' FROM DUAL
      4  UNION SELECT '2007-05' FROM DUAL;4 rows insertedSQL> SELECT * FROM MYTEST
      2  WHERE YEARMONTH=TO_CHAR(ADD_MONTHS(TO_DATE('2007-03','YYYY-MM'),-1),'yyyy-mm')
      3  OR YEARMONTH=TO_CHAR(ADD_MONTHS(TO_DATE('2007-03','YYYY-MM'),-2),'yyyy-mm')
      4  OR YEARMONTH='2007-03';YEARMONTH
    ------------------------------------------------------------
    2007-01
    2007-02
    2007-03
      

  5.   

    select * from emp where hiredate between trunc(to_date('1981-3','yyyy-mm'),'year') and to_date('1981-3','yyyy-mm');
      

  6.   

    CREATE TABLE MYTEST(YEARMONTH NVARCHAR2(30));
    DELETE MYTEST;
    INSERT INTO MYTEST SELECT '2007-01' FROM DUAL
     UNION SELECT '2007-02' FROM DUAL
     UNION SELECT '2007-03' FROM DUAL
     UNION SELECT '2007-05' FROM DUAL
     UNION SELECT '2006-12' FROM DUAL;SELECT * FROM (
        SELECT YEARMONTH  FROM MYTEST
        WHERE  YEARMONTH <= '2007-03'    //可以换成传递的参数
        ORDER BY YEARMONTH DESC
    )
    WHERE ROWNUM <= 3;