我要处理一个sql语句  (处理为空的)比如:  
"select  *  from  (select  *  from  table1  where  a=23  and  b<'')  where  col2  =  and  col2>12  and  col3  BETWEEN  11  and  "  
现在有三个地方  "b<''","col2  =","col3  BETWEEN  11  and  "由于他们的值为空(这个值我是从数据库中查的,没有就为null)我就是要把这些字句删除了  
处理结果应该是:"select  *  from  (select  *  from  table1  where  a=23  )  where    col2>12  "  
现在我的思路是将所有的关键字除where换成")("(where替换为"(")然后找到每个子句调用处理程序判断处理,  现在有一个问题是在处理嵌套的情况时,最里面一层的最右边的子嵌套替换后缺少一个")"  例如:(()()(*)    *位置就代表缺少的")"现在怎么找到它并返回它的位置  
(子句开头和结尾的位置是我在删除时的依据)我现在的想法是用栈来实现,然后从外往里扫描,但好像不行  
希望大家给个能找到那个缺少的")"的方法  
当然如果有更好的处理这样sql语句的想法也行,我可以重新实现

解决方案 »

  1.   

    现在我只要处理select的 其他update insert不涉及,还有我是在oracle下的可能还有考虑一些oracle的函数
      

  2.   

    判断某个字段为空:
    Where field_Test is null如果要用到过滤特殊字符,例如回车,TAb键等使用escape关键字,建议看看PL/SQL我还是没有弄明白你要干什么
      

  3.   

    我要做的就是处理sql语句里约束条件部分,变量为空的情况,如果为空则删除字句啊
    select  *  from  (select  *  from  table1  where  a=23  and  b<'')  where  col2  =  and  col2>12  and  col3  BETWEEN  11  and  "  
    现在有三个地方  "b<''","col2  =","col3  BETWEEN  11  and  "由于他们的值为空(这个值我是从数据库中查的,没有就为null)我就是要把这些字句删除了  
    处理结果应该是:"select  *  from  (select  *  from  table1  where  a=23  )  where    col2>12  "
    这个就是处理的例子