一个可以解析嵌套IIF语句的代码
2005-09-26 00:10
459 查看
不太常用,对于一些IIF表达式,需要转换成sql server支持的格式,就写了这个转换。反复调试之后,就可以支持嵌套的调用了。
static public string ChangeIIF(string oldstr)
string str=oldstr;
str.Trim();
int p0=oldstr.IndexOf("IIF");
if(p0==-1)return oldstr;
int p1=str.IndexOf("(",p0);
//排除中间的()的干扰
int l=0; //记录经过的(
int p2=p1+1;
for(;p2<str.Length ;p2++)
if(l==0&&str.Substring(p2,1)==",")break;
if(str.Substring(p2,1)=="(")l++; //每增加一个(,l加1
if(str.Substring(p2,1)==")")l--; //每增加一个(,l加1
}
if(p2==str.Length)return ""; //意外
//int p2=str.IndexOf(",",p1);
l=0; //记录经过的(
int p3=p2+1;
for(;p3<str.Length ;p3++)
if(l==0&&str.Substring(p3,1)==",")break;
if(str.Substring(p3,1)=="(")l++; //每增加一个(,l加1
if(str.Substring(p3,1)==")")l--; //每增加一个(,l加1
}
if(p3==str.Length)return ""; //意外
//int p3=str.IndexOf(",",p2+1); //第二个“,”
//取得结束的),排除中间的()的干扰
l=0; //记录经过的(
int p4=p3+1;
for(;p4<str.Length ;p4++)
if(l==0&&str.Substring(p4,1)==")")break;
if(str.Substring(p4,1)=="(")l++; //每增加一个(,l加1
if(str.Substring(p4,1)==")")l--; //每增加一个(,l加1
}
//int p4=str.Length-1;
if(p4==str.Length)return ""; //意外
if(p1*p2*p3*p4<=0)return oldstr;
return oldstr.Substring(0,p0)+"CASE WHEN "+str.Substring(p1+1,p2-p1-1)+" THEN "+str.Substring(p2+1,p3-p2-1)+" ELSE "+str.Substring(p3+1,p4-p3-1)+" END"+oldstr.Substring(p4+1);
}
static public string ChangeIIF(string oldstr)
string str=oldstr;
str.Trim();
int p0=oldstr.IndexOf("IIF");
if(p0==-1)return oldstr;
int p1=str.IndexOf("(",p0);
//排除中间的()的干扰
int l=0; //记录经过的(
int p2=p1+1;
for(;p2<str.Length ;p2++)
if(l==0&&str.Substring(p2,1)==",")break;
if(str.Substring(p2,1)=="(")l++; //每增加一个(,l加1
if(str.Substring(p2,1)==")")l--; //每增加一个(,l加1
}
if(p2==str.Length)return ""; //意外
//int p2=str.IndexOf(",",p1);
l=0; //记录经过的(
int p3=p2+1;
for(;p3<str.Length ;p3++)
if(l==0&&str.Substring(p3,1)==",")break;
if(str.Substring(p3,1)=="(")l++; //每增加一个(,l加1
if(str.Substring(p3,1)==")")l--; //每增加一个(,l加1
}
if(p3==str.Length)return ""; //意外
//int p3=str.IndexOf(",",p2+1); //第二个“,”
//取得结束的),排除中间的()的干扰
l=0; //记录经过的(
int p4=p3+1;
for(;p4<str.Length ;p4++)
if(l==0&&str.Substring(p4,1)==")")break;
if(str.Substring(p4,1)=="(")l++; //每增加一个(,l加1
if(str.Substring(p4,1)==")")l--; //每增加一个(,l加1
}
//int p4=str.Length-1;
if(p4==str.Length)return ""; //意外
if(p1*p2*p3*p4<=0)return oldstr;
return oldstr.Substring(0,p0)+"CASE WHEN "+str.Substring(p1+1,p2-p1-1)+" THEN "+str.Substring(p2+1,p3-p2-1)+" ELSE "+str.Substring(p3+1,p4-p3-1)+" END"+oldstr.Substring(p4+1);
}
相关文章推荐
- JSON 解析嵌套json字符串,一个json字符串中嵌套另一个json字符串 (附解析代码)
- 面试题解析:1 Java中switch语句可以作用在enum上的测试
- 在C#中写什么语句可以让它执行一个可执行文件呢
- Python中if判断语句在只有一个break子句时可以写在一行
- 一个不错的免费二级域名,可以自己解析A记录 CNAME等,而且是备案的域名。
- Java - try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
- 关于switch语句的一个小代码
- [置顶] 判断一个数是不是素数的最快的方法(代码可以运行,Miller_Rabin + 新的)
- 如果有一个工具可以帮助你将你的代码可视化,你需要吗?
- Java解析复杂嵌套JSON数据格式代码,提取出来所有的key和value。亲测代码可用
- 有没有代码可以判断一个List<View>集合里的view是什么view
- C::写一个可以演示多个字符从两端移动,中间汇聚的代码
- 一个简单的xml类,可以解析和生成xml文件数据
- 代码整洁之道------它山之玉可以重构:身份证号码解析、验证工具(第一天)
- Builder 解析 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
- 好的代码里只要一个return语句
- 编写代码模拟手机与SIM卡的组合关系。 要求: SIM卡类负责创建SIM卡; Phone类负责创建手机; 手机可以组合一个SIM卡;
- java中提供了对正则表达式的支持。 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。 注意:只填写缺少代码,不要
- SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。
- 解析:清除SQL被注入恶意病毒代码的语句