zoukankan      html  css  js  c++  java
  • 支持Oracle的模糊查询和精准查询

    相信所有的软件开发者都做过页面上的查询功能,而且很多都需要既支持模糊查询的,也需要支持精准查询的,而且不需要增加多余的功能,只需要在文本框中输入包含类似*之类的符号即可。

    下面的方法就是通过*来判断到底是模糊查询还是精准查询,方法如下:

            /// <summary>
            /// 通过输入文本和字段名称来组织返回的查询字符串
            /// </summary>
            /// <param name="query_name">input string</param>
            /// <param name="query_field">query field</param>
            /// <returns></returns>
            public string QueryString_By_QueryType(string query_name, string query_field)
            {
                string query_string = string.Empty;
                //replace consecutive star siginal to be one star siginal, eg. '***' = '*'
                query_name = Regex.Replace(query_name, @"*{1,}", "*");
                
    
                //Split the condition to be a Array
                string[] conditionList = query_name.Split('*').Where(A=>!string.IsNullOrEmpty(A)).ToArray();
                if (conditionList.Length == 1)
                {
                    if (!string.IsNullOrEmpty(query_string))
                    {
                        query_string += " AND ";
                    }
                    if (!query_name.Contains('*'))
                    {
                        query_string += query_field + " = '" + conditionList[0] + "'";
                    }
                    else
                    {
                        if (query_name.StartsWith("*"))
                        {
                            query_string = query_field + " LIKE '" + query_name.Replace('*', '%') + "'";
                        }
                        if (!string.IsNullOrEmpty(query_string))
                        {
                            query_string += " AND ";
                        }
                        if (query_name.EndsWith("*"))
                        {
                            query_string += query_field + " LIKE '" + query_name.Replace('*', '%') + "'";
                        }
                    }
                }
                else if (conditionList.Length > 1)
                {
                    foreach (var condition in conditionList)
                    {
                        if (!string.IsNullOrEmpty(query_string))
                        {
                            query_string += " AND ";
                        }
                        query_string += "INSTR(" + query_field + ", '" + condition + "', -1) > 0";
                    }
                    for (int i = 1; i < conditionList.Length; i++)
                    {
                        if (i < conditionList.Length)
                        {
                            if (!string.IsNullOrEmpty(query_string))
                            {
                                query_string += " AND ";
                            }
                            query_string += "INSTR(" + query_field + ",'" + conditionList[i - 1] + "', -1) < INSTR(" + query_field + ",'" + conditionList[i] + "', -1)";
                        }
                    }
                }
    
                return query_string;
            }
    

      调用的时候只需要传入文本和字段名称即可,程序会根据*来判断到底该如何去组织查询语句。

           此方法只支持Oracle的查询,如果想要此方法支持SqlServer的查询,只需要把Oracle中的函数稍加修改即可。

  • 相关阅读:
    oracle ORA01001,请求资源正忙或无效
    Flex[Embed(source='assets/error.png')]无法解析用于转换的代码错误
    正在覆盖未标记为 override 的函数
    LINUX umask详解
    C++服务器学习路线
    计算kappa系数
    umask的含义及设置
    Seurat的各种数据成员访问
    GAN训练判别器和生成器时的顺序与detach
    autograd.grad 学习
  • 原文地址:https://www.cnblogs.com/zunzunQ/p/7878281.html
Copyright © 2011-2022 走看看