处理一个sql语句,如何找到不匹配的")"
我要处理一个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语句的想法也行,我可以重新实现
问题点数:40、回复次数:3Top
1 楼tylgl()回复于 2006-06-04 00:11:13 得分 0
现在我只要处理select的 其他update insert不涉及,还有我是在oracle下的可能还有考虑一些oracle的函数
Top
2 楼huataixiang19810225(无名)回复于 2006-06-04 11:24:30 得分 0
判断某个字段为空:
Where field_Test is null
如果要用到过滤特殊字符,例如回车,TAb键等使用escape关键字,建议看看PL/SQL
我还是没有弄明白你要干什么Top
3 楼tylgl()回复于 2006-06-04 23:25:58 得分 0
我要做的就是处理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 "
这个就是处理的例子Top




