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

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

        /// <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的模糊查询和精准查询的更多相关文章

  1. Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询

    在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...

  2. Oracle总结【SQL细节、多表查询、分组查询、分页】

    前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语句和相关一些概念....写下本博文的原因就是记载着Or ...

  3. Oracle的回收站和闪回查询机制(一)

    实际工作中,我们经常会遇到一些情况,误删除某些表或某些表的某些记录,这时候就需要我们将这些记录重新插入进去.如何才能解决这个问题呢? Oracle的Flashback query(闪回查询)为我们解决 ...

  4. Oracle笔记(1) 简单查询、限定查询、数据的排序

    Oracle笔记(四) 简单查询.限定查询.数据的排序   一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...

  5. .Net程序员学用Oracle系列(14):子查询、集合查询

    1.子查询 1.1.子查询简介 1.2.WITH 子查询 2.集合查询 2.1.UNION 和 UNION ALL 2.2.MINUS 2.3.INTERSECT 2.4.集合运算与 ORDER BY ...

  6. oracle使用connect by进行级联查询 树型菜单

    Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥 ...

  7. Oracle中把一张表查询结果插入到另一张表中

      1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...

  8. ORACLE 多表连接与子查询

    Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.co ...

  9. Oracle学习笔记(5)——查询

    基本查询语句 SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions] 在SQL*PLUS中设置格式 更改显示字段 ...

随机推荐

  1. Learning-MySQL【1】:数据库初识及 MySQL 的安装

    一.什么是数据 数据(Data):描述事务的符号记录,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中描述一个事物, ...

  2. c# 7.1 Async Main方法

    安装 .net framework sdk 7.1 新建一个 .net framework 7.1 的程序 在程序的工程文件的第一个 PropertyGroup  节点下加入以下子属性   <L ...

  3. linux文件管理之链接文件

    文件链接 ====================================================================================软链接 或 符号链接硬 ...

  4. 解决无法连接mysql问题

    解决无法连接mysql问题 在my.ini文件下加入explicit_defaults_for_timestamp 清空data文件夹 Cmd初始化mysql   输入>Mysqld  --in ...

  5. js之原型,原型链

    1.原型是什么?    在构造函数创建出来的时候,系统会默认的创建并关联一个对象,这个对象就是原型,原型对象默认是空对象    默认的原型对象中会有一个属性constructor指向该构造函数  原型 ...

  6. 第K个幸运数字(4、7)

    题目:4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字,前几个幸运数字为:4,7,44,47,74,77,444,447······输出第K个数字. 思路是:将 ...

  7. Hadoop经典案例(排序&Join&topk&小文件合并)

    ①自定义按某列排序,二次排序 writablecomparable中的compareto方法 ②topk a利用treemap,缺点:map中的key不允许重复:https://blog.csdn.n ...

  8. 一个简单CI/CD流程的思考

    因为公司有两地研发团队,在统一CI/CD上难度不亚于两家公司合并后的新流程建立,并非不可攻克,简单描述下心得. 首先,代码管理使用gerrit -> 因其强大的 codereview 功能被选中 ...

  9. Vue.js 基本功能了解一下~

    一.写在前面 隔了这么久才来出Vue的第二篇文章,真是堕落了,自己先惩罚下/(ㄒoㄒ)/~~ 回过头看自己第一篇相关文章<初试 Vue.js>(http://www.cnblogs.com ...

  10. learning makefile var