一个可以解析嵌套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);
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏龙首琴剑庐

Java微信支付快速入门&工具类

快速入门 1、微信支付官方在线API入口: https://pay.weixin.qq.com/wiki/doc/api/index.html 2、微信支付能力...

97112
来自专栏码农阿宇

.Net Core下 Redis的String Hash List Set和Sorted Set的例子

1.新建一个.Net Core控制台应用程序,用Nuget导入驱动 打开程序包管理控制台, ? 执行以下代码。 PM> Install-Package Serv...

3997
来自专栏Create Sun

quartz.net插件类库封装(含源码)

1、前言    最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 ...

29411
来自专栏跟着阿笨一起玩NET

LINQ多条件OR模糊查询

本文章转载:http://www.cnblogs.com/guyun/archive/2012/10/18/2729888.html

1761
来自专栏Java成神之路

JavaUtil_06_HttpUtil_使用httpclient实现

2683
来自专栏跟着阿笨一起玩NET

多条件动态LINQ 组合查询

本文章转载:http://www.cnblogs.com/wangiqngpei557/archive/2013/02/05/2893096.html

1192
来自专栏张善友的专栏

.NET 4 System.Threading.CountdownEvent

在Visual Studio 2010 and .NET Framework 4 Training Kit中有个System.Threading.Countdo...

1818
来自专栏程序员与猫

Dapper连接与事务的简单封装

增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装。在之后使用Dapper....

3157
来自专栏LeoXu的博客

org.apache.http.client.methods.HttpPost 两种消息体形式 —— UrlEncodedFormEntity 和 StringEntity

使用 UrlEncodedFormEntity 来设置 body,消息体内容类似于“KEY1=VALUE1&KEY2=VALUE2&...”这种形式,服务端接收...

2562
来自专栏跟着阿笨一起玩NET

Linq to XML 读取XML 备忘笔记

本文转载:http://www.cnblogs.com/infozero/archive/2010/07/13/1776383.html

950

扫码关注云+社区

领取腾讯云代金券