我的TABLE_NAME有一条数据 MIDACT_106_20120325现在我用语句
select * from  
(
SELECT TABLE_NAME,to_date(substr(TABLE_NAME,instr(TABLE_NAME,'_',1,2)+1,length(TABLE_NAME)),'yyyy-mm-dd') tdd  FROM USER_TABLES 
WHERE UPPER(TABLE_NAME) like 'MIDACT_106_%'
)where tdd>=:adate 传入一个日期过滤掉这条数据  但是要报文件和格式不匹配

解决方案 »

  1.   

     把你的参数也to_date一下。
      

  2.   

    where tdd>=to_date(:adate,'yyyy-mm-dd');
      

  3.   


    select * from   
    (
    SELECT TABLE_NAME,to_date(substr(TABLE_NAME,instr(TABLE_NAME,'_',1,2)+1,length(TABLE_NAME)),'yyyy-mm-dd') tdd FROM USER_TABLES 
    WHERE UPPER(TABLE_NAME) like 'MIDACT_106_%'
    ) tmpwhere tmp.tdd>=to_date(:adate,'yyyy-mm-dd');
      

  4.   

    我又测试了一下  好像是因为表的原因  我上面的语句是查的USER_TABLES表   就不行   我重新建一个表测试就可以 为什么喃  难道USER_TABLES有些动作不能实现?
      

  5.   

    UPPER(TABLE_NAME) like 'MIDACT_106_%'
    这个查询有问题  应改为
    UPPER(TABLE_NAME) like 'MIDACT\_106\_%'   escape   '\'
      

  6.   

    机器上没装oracle,这个问题应该是出在你的子查询里面,你把子查询拿出来单独调试先。
      

  7.   

    把表名直接填进去
    SELECT to_date(substr('MIDACT_106_20120325',
                          instr('MIDACT_106_20120325', '_', 1, 2) + 1,
                          length('MIDACT_106_20120325')),
                   'yyyymmdd')
      FROM DUAL;然后再试试
    传入一个日期过滤掉这条数据应该用<>select * from   
    (
    SELECT TABLE_NAME,to_date(substr(TABLE_NAME,instr(TABLE_NAME,'_',1,2)+1,length(TABLE_NAME)),'yyyymmdd') tdd FROM USER_TABLES  
    WHERE UPPER(TABLE_NAME) like 'MIDACT_106_%'
    )where tdd>:adate  or  tdd<:adate