sql中生成查询的模糊匹配字符串

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Sql]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_Sql]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [序数表]
GO

--为了效率,所以要一个辅助表配合
select top 1000 id=identity(int,1,1) into 序数表 
from syscolumns a,syscolumns b
alter table 序数表 add constraint pk_id_序数表 primary key(id)
go

/*--根据指定字符串生成查询的模糊匹配字符串

条件连接的关键字为 and,or
 可以任意指定括号
 生成的条件表达式为 like 模糊匹配

--邹建 2004.08(引用请保留此信息)--*/

/*--调用示例

--调用示例
 select A=dbo.f_Sql('(Web or HTML or Internet) and (Programmer or Developer)','content')
 select B=dbo.f_Sql('Web or HTML or Internet','content')
 select C=dbo.f_Sql('(Web and HTML)','content')
 select D=dbo.f_Sql('Web','content')
--*/
--示例函数
create function f_Sql(
@str Nvarchar(1000), --要检索的字符串
@fdname sysname --在那个字段中检索
)returns Nvarchar(4000)
as
begin
 declare @r Nvarchar(4000)
 set @r=''
 select @r=@r+case
  when substring(@str,id,charindex(' ',@str+' ',id)-id) in('or','and')
   then ' '+substring(@str,id,charindex(' ',@str+' ',id)-id)+' '
  when substring(@str,id,1)='('
   then '(['+@fdname+'] like ''%'
    +substring(@str,id+1,charindex(' ',@str+' ',id)-id-1)
    +'%'''
  when substring(@str,charindex(' ',@str+' ',id)-1,1)=')'
   then '['+@fdname+'] like ''%'
    +substring(@str,id,charindex(' ',@str+' ',id)-id-1)
    +'%'')'
  else '['+@fdname+'] like ''%'
   +substring(@str,id,charindex(' ',@str+' ',id)-id)
   +'%'''
  end
 from 序数表
 where id<=len(@str)
  and charindex(' ',' '+@str,id)-id=0
 return(@r)
end
go

(0)

相关推荐

  • 实现按关健字模糊查询,并按匹配度排序的SQL语句

    复制代码 代码如下: IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB GO CREATE TABLE tb (ID INT IDENTITY(1,1),VALUE NVARCHAR(100)) INSERT tb SELECT N'中国' UNION ALL SELECT N'中国人' UNION ALL SELECT N'中国人民' UNION ALL SELECT N'日本' UNION ALL SELECT N'日本人' UNION ALL SELE

  • 扩展 Entity Framework支持复杂的过滤条件(多个关键字模糊匹配)

    之前遇到一个棘手的Linq to EF查询的技术问题,现有产品表Product,需要根据多个关键字模糊匹配产品名称, 现将解决方案分享出来. 问题描述 根据需求,我们需要编写如下的SQL语句来查询产品 复制代码 代码如下: select * from dbo.Product where (ProductName like 'Product1%' or ProductName like 'Product2%') 如何将以上的SQL语句转换成EF的写法呢? 方案一 可以使用Union,将以上SQL语

  • C/C++实现字符串模糊匹配

    需求: 准入授权配置文件有时候分了好几个维度进行配置,例如 company|product|sys这种格式的配置: 1.配置 "sina|weibo|pusher" 表示 sina公司weibo产品pusher系统能够准入,而"sina|weibo|sign"不允许准入 2.配置 "sina|*|pusher" 表示sina公司所有产品的pusher系统都能够准入 3.配置 "*|*|pusher" 表示所有公司的所有产品的p

  • sql中生成查询的模糊匹配字符串

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Sql]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_Sql] GO if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTa

  • SQL多表联合查询时如何采用字段模糊匹配

    目录 先说一下背景和要求 方法一 方法二 方法三 先说一下背景和要求 背景:由于业务或是其他不描述的原因的问题导致原有存储的数据发生变动,与现有数据有差别,但还是能勉强看明白数据内容. 要求:实现A表的名称字段和B表的名称字段要模糊匹配. 上图: 假如A表长这样: B表长这样: 然后我要想变成这样: 简单说就是在我关联查询两表时,条件字段的取值看起来不一样,但是意思是一样的,应该要把这种数据关联起来.但是SQL里面“=”两边又必须严格相同,所以现在怎么办呢? 方法一 可以采用类似于LIKE模糊查

  • Mybatis如何解决sql中like通配符模糊匹配问题

    目录 sql中like通配符模糊匹配问题 将查询条件通过功能类处理 后台Contronller获得查询条件 mapper.xml中对应的使用方法 使用like实现模糊匹配 方式一 方式二 方式三 sql中like通配符模糊匹配问题 针对oracle数据库: 将查询条件通过功能类处理 /**      * Description: 处理转义字符%和_,针对ORACLE数据库      *       * @param str      * @return      */     public st

  • Laravel5中实现模糊匹配加多条件查询功能的方法

    本文实例讲述了Laravel5中实现模糊匹配加多条件查询功能的方法.分享给大家供大家参考,具体如下: 方法1. ORM模式 public function ReportAccurate($data) { if(is_array($data)) { $where = $this->whereAll($data); return $where; } else { return false; } } /*多条件模糊*/ public function whereAll($data) { $query

  • Oracle中简单查询、限定查询、数据排序SQL语句范例和详细注解

    一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言. Oracle数据库之所以发展的很好,主要也是因为Oracle是全世界最早采用SQL语句的数据库产品. SQL功能强大,概括起来,它可以分成以下几组: 复制代码 代码如下: DML(Data Manipulation Language) 数据操作语言,用于

  • thinkPHP实现多字段模糊匹配查询的方法

    本文实例讲述了thinkPHP实现多字段模糊匹配查询的方法.分享给大家供大家参考,具体如下: 引言:有时候查询要匹配多个字段.比如查询地址,地址是由多个字段组成的.有省.市.区等等,以及详细地址.这个时候如何查询呢? 实现不同字段相同的查询条件 $User = M("User"); // 实例化User对象 $map['name|title'] = 'thinkphp'; // 把查询条件传入查询方法 $User->where($map)->select(); 用到项目中

  • Mybatis 中 Oracle 的拼接模糊查询及用法详解

    一.结论 这里先给大家看一下结论 Oracle 中,拼接模糊查询的正确写法 SELECT A.USER_ID, A.USER_NAME FROM USER A AND A.USER_NAME like concat(concat('%','w'),'%') 或者 AND A.USER_NAME like '%' || 'w' || '%' Mybatis 中,拼接模糊查询的正确写法 <select id="selectByName" resultMap="BaseRes

  • Python实现字符串模糊匹配方式

    目录 Python字符串模糊匹配 包含四个参数 python-re模块,模糊匹配 Python字符串模糊匹配 Python的difflib库中get_close_matches方法 包含四个参数 x:被匹配的字符串. words:去匹配的字符串列表. n,前topn个最佳匹配返回,默认为3. cutoff:匹配度大小,为[0, 1]浮点数,默认数值0.6. import difflib list1 = ['ape', 'apple', 'peach', 'puppy'] difflib.get_

  • python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配

    已知一个元素,在一个list中找出相似的元素 使用场景: 已知一个其它来源的字符串, 它有可能是不完全与我数据库中相应的字符串匹配的,因此,我需要将其转为适合我数据库中的字符串 使用场景太绕了, 直接举例来说吧 随便举例: 按青岛城市的城区来说, 我数据库中存储的城区是个list:['市北区', '市南区', '莱州市', '四方区']等 从其它的数据来源得到一个城区是:市北 我怎么得到与市北相似相近的市北区 解决方案: In [1]: import difflib In [2]: cityar

  • MySQL全文索引like模糊匹配查询慢解决方法

    目录 需求 全文索引介绍 全文索引使用 中文分词与全文索引 什么是N-gram? 这个上面这个N是怎么去配置的? 修改方式 实际使用 初始化测试数据 添加索引 查询 1.使用自然语言模式 NATURAL LANGUAGE MODE 查询 2.使用布尔模式(BOOLEAN MODE)查询 实际使用 注意点 需求 需要模糊匹配查询一个单词 select * from t_phrase where LOCATE('昌',phrase) = 0; select * from t_chinese_phra

随机推荐