一个可以解析嵌套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);
        }
posted @   jetz  阅读(658)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示