支持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的模糊查询和精准查询的更多相关文章
- Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询
在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...
- Oracle总结【SQL细节、多表查询、分组查询、分页】
前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语句和相关一些概念....写下本博文的原因就是记载着Or ...
- Oracle的回收站和闪回查询机制(一)
实际工作中,我们经常会遇到一些情况,误删除某些表或某些表的某些记录,这时候就需要我们将这些记录重新插入进去.如何才能解决这个问题呢? Oracle的Flashback query(闪回查询)为我们解决 ...
- Oracle笔记(1) 简单查询、限定查询、数据的排序
Oracle笔记(四) 简单查询.限定查询.数据的排序 一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...
- .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 ...
- oracle使用connect by进行级联查询 树型菜单
Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥 ...
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- ORACLE 多表连接与子查询
Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.co ...
- Oracle学习笔记(5)——查询
基本查询语句 SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions] 在SQL*PLUS中设置格式 更改显示字段 ...
随机推荐
- Learning-Python【21】:Python常用模块(4)—— re、logging、hashlib、subprocess
re 模块:与正则相关的模块 在使用 re 模块之前,需要先了解正则表达式(regular expression),描述了一种字符串匹配的模式(pattern),可以用来检查一个字符串是否含有某个子字 ...
- 字段值为 null 时,序列化或反序列化成其他值
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.G ...
- TestNG详解(单元测试框架)
一.TestNG的优点 1.1 漂亮的HTML格式测试报告 1.2 支持并发测试 1.3 参数化测试更简单 1.4 支持输出日志 1.5 支持更多功能的注解 二.编写TestNG测试用例的步骤 2.1 ...
- 1.6 安全认证与授权(springboot与安全)
引言:以下文档是学习尚硅谷关于springboot教学视频后整理而来! 一.安全 认证(Authentication):证明你是谁? 授权(Authorization):你能干什么? 参考资料: Sp ...
- Windows to go 慢,更换 user profile 路径
用 wintousb 安装了 windwos 10 到 u盘 之后, 发觉这个windows 贼慢,卡的不行. 想起以前台式机上用[太阳花]SDD,硬盘满了也是这个感觉的. 就知道 C盘的userpr ...
- ionicAPP打开第三方APP
近来,碰到一个问题,需要在ionicAPP中打开第三方APP 然后,就找资料,发现了个比较好的解决方案 可以参考:https://blog.csdn.net/a727911438/article/de ...
- 『PyTorch』第五弹_深入理解Tensor对象_中下:数学计算以及numpy比较_&_广播原理简介
一.简单数学操作 1.逐元素操作 t.clamp(a,min=2,max=4)近似于tf.clip_by_value(A, min, max),修剪值域. a = t.arange(0,6).view ...
- WCF发布到IIS 7.0,并以https访问
一.IIS 7.0中如何生成服务器证书,并要求网站以http访问可参考: http://www.cnblogs.com/chnking/archive/2008/10/07/1305811.html ...
- js对象的深拷贝
关于对象的深拷贝一直是大家津津乐道一个话题,本骚年通过研究(yuedu)发现还是很easy的. 首推的方法简单有效,JSON.stringfy()和JSON.parse()即可搞定.但是这种简单粗暴的 ...
- 实践:搭建基于Load Balancer的MySql Cluster
服务器规划: 整套系统全部在rhel5u1 server 64位版本下,由基于xen的虚拟机搭建,其中集群管理节点*2.SQL节点*2.数据节点*4.Web服务节点*2组成,其中数据节点做成2个组,每 ...