表  tb1
 时间字段: a_date(格式:年月日)
 输入的年月: s_date(格式:年月)
下面俩方法貌似都不行、需要怎么改或者有其他方法也行SELECT * FROM tb1 t
WHERE to_char( t.a_date,'yyyymm') = to_char(s_date,'yyyymm')select * from tb1 t
where DATEPART(yy,t.a_date) = DATEPART(yy,s_date) 
   and DATEPART(mm,t.a_date) = DATEPART(mm,s_date) 

解决方案 »

  1.   

    -- 比如说:要查询2011年6月份的数据,你可以执行以下语句:
    SELECT * FROM tb1 t
    WHERE t.a_date >= to_date('2011-06-01','YYYY-MM-DD')
    AND   t.a_date <  to_date('2011-07-01','YYYY-MM-DD')
      

  2.   

    sql倒是会  刚开始学oracle呢、 一些时间函数还不是很清楚、
      

  3.   

    -- 输入参数只要年月就可以啦,日默认为当月的第一天,例如:SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';会话已更改。SQL> select to_date('2011-06','yyyy-mm') from dual;TO_DATE('2011-06','
    -------------------
    2011-06-01 00:00:00
      

  4.   

    嗯  多谢了  根据你的意思 我想了一种方法
     SELECT * FROM tb1 t where 
     to_date( t.a_date,'yyyy-mm-dd') >= to_date('2011-07', 'yyyy-mm') and 
     to_date( t.a_date,'yyyy-mm-dd') < add_months(to_date('2011-07', 'yyyy-mm'),1)
      

  5.   


    你为什么表的日期字段要用字符串类型呢,而不直接用日期类型呢?
    -- 请看:
    http://topic.csdn.net/u/20110323/13/43a9766c-9a40-470d-8adb-9c2594282203.html
      

  6.   

    SELECT * FROM tb1 t
    WHERE to_char( t.a_date,'yyyymm') = to_char(s_date,'yyyymm')这种方式是可以的
    比如 表a里的字段create_time是dateselect *
      from tab1 a
     where to_char(a.create_time, 'yyyymm') = to_char(to_date('201106','yyyymm'),'yyyymm')
     
      

  7.   

    嗯 学习了  偶上周才开始接触oracle 还没考虑这些呢   结贴咯