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

2023年 4月 16日 78.7k 0

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[f_Sql]')andxtypein(N'FN',N'IF',N'TF')) dropfunction[dbo].[f_Sql] GO ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[序数表]')andOBJECTPROPERTY(id,N'IsUserTable')=1) drop

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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论