zoukankan      html  css  js  c++  java
  • 一个可以解析嵌套IIF语句的代码

    不太常用,对于一些IIF表达式,需要转换成sql server支持的格式,就写了这个转换。反复调试之后,就可以支持嵌套的调用了。
            /// <summary>
            
    /// 转换字符串中的IIF语句
            
    /// </summary>
            
    /// <param name="?"></param>
            
    /// <returns></returns>

            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);
            }
  • 相关阅读:
    Lucene 入门实战
    ActiveMQ 入门实战(3)--SpringBoot 整合 ActiveMQ
    ActiveMQ 入门实战(2)--Java 操作 ActiveMQ
    Hdevelop(Halcon)快捷键
    2021年9月3日第7次刷第一章。但行好事莫问前程
    大家好。我准备第6次从第一章重新往回写了。
    ODOO13之十四 :Odoo 13开发之部署和维护生产实例
    Odoo 13之十三 :开发之创建网站前端功能
    ODOO13之12:Odoo 13开发之报表和服务端 QWeb
    doo 13 之11 :开发之看板视图和用户端 QWeb
  • 原文地址:https://www.cnblogs.com/jetz/p/243925.html
Copyright © 2011-2022 走看看