SQL判断两个带有分隔符的字符串是否重叠
SQL判断两个带有分隔符的字符串是否重叠SQL Script:
ALTER FUNCTION [dbo].[ufn_IsOverlap]
(
@Value1 NVARCHAR(MAX),
@Value2 NVARCHAR(MAX),
@SPLIT VARCHAR(1)=',' --预设分隔符
) RETURNS VARCHAR(10) --Y:有重叠,N:不重叠
AS
BEGIN
/************************************************
程序说明:SQL判断两个带有分隔符的字符串是否重叠
--测试案例
print dbo.ufn_IsOverlap('','',',')
print dbo.ufn_IsOverlap('','a',',')
print dbo.ufn_IsOverlap('a','a,c',',')
print dbo.ufn_IsOverlap('a,c','a',',')
print dbo.ufn_IsOverlap('a','a',',')
print dbo.ufn_IsOverlap('a,b,c','d,c,f',',')
print dbo.ufn_IsOverlap('a,b,c,d,e,f,g','z,x,c',',')
print dbo.ufn_IsOverlap(',d,','a,b,c,d,e,f,g',',')
print dbo.ufn_IsOverlap('1,2,3,4,5,6,7','a,b,c,d,e,f,g',',')
print CHARINDEX('1a','bab')
************************************************/
--两个参数有空值,返回N
IF ISNULL(@Value1,'')='' OR ISNULL(@Value2,'')='' RETURN 'N'
DECLARE @tmp NVARCHAR(2000)
DECLARE @Return CHAR(1)--Y/N
SELECT @Return='N'
--基于算法优化,下面循环长度小的数据
IF LEN(@Value1)>LEN(@Value2)
BEGIN
DECLARE @Swap NVARCHAR(max)
SELECT @Swap=@Value2
SELECT @Value2=@Value1
SELECT @Value1=@Swap
END;
--循环@Value1
WHILE(CHARINDEX(@SPLIT,@Value1)<>0)
BEGIN
SET @tmp=''
SET @tmp=RTRIM(LTRIM(SUBSTRING(@Value1,1,CHARINDEX(@SPLIT,@Value1)-1)))
--判断与@Value2是否重叠
IF CHARINDEX(','+@tmp+',',','+@Value2+',')<>0
BEGIN
SELECT @Return='Y'
BREAK;
END;
SET @Value1=STUFF(@Value1,1,CHARINDEX(@SPLIT,@Value1),'')
END
--处理无分隔符的数据(或者循环的最后一个数据)
IF @Value1<>'' AND CHARINDEX(','+@Value1+',',','+@Value2+',')<>0
SELECT @Return='Y'
RETURN @Return
END;
//来源:C/S框架网(www.csframework.com) QQ:23404761
ALTER FUNCTION [dbo].[ufn_IsOverlap]
(
@Value1 NVARCHAR(MAX),
@Value2 NVARCHAR(MAX),
@SPLIT VARCHAR(1)=',' --预设分隔符
) RETURNS VARCHAR(10) --Y:有重叠,N:不重叠
AS
BEGIN
/************************************************
程序说明:SQL判断两个带有分隔符的字符串是否重叠
--测试案例
print dbo.ufn_IsOverlap('','',',')
print dbo.ufn_IsOverlap('','a',',')
print dbo.ufn_IsOverlap('a','a,c',',')
print dbo.ufn_IsOverlap('a,c','a',',')
print dbo.ufn_IsOverlap('a','a',',')
print dbo.ufn_IsOverlap('a,b,c','d,c,f',',')
print dbo.ufn_IsOverlap('a,b,c,d,e,f,g','z,x,c',',')
print dbo.ufn_IsOverlap(',d,','a,b,c,d,e,f,g',',')
print dbo.ufn_IsOverlap('1,2,3,4,5,6,7','a,b,c,d,e,f,g',',')
print CHARINDEX('1a','bab')
************************************************/
--两个参数有空值,返回N
IF ISNULL(@Value1,'')='' OR ISNULL(@Value2,'')='' RETURN 'N'
DECLARE @tmp NVARCHAR(2000)
DECLARE @Return CHAR(1)--Y/N
SELECT @Return='N'
--基于算法优化,下面循环长度小的数据
IF LEN(@Value1)>LEN(@Value2)
BEGIN
DECLARE @Swap NVARCHAR(max)
SELECT @Swap=@Value2
SELECT @Value2=@Value1
SELECT @Value1=@Swap
END;
--循环@Value1
WHILE(CHARINDEX(@SPLIT,@Value1)<>0)
BEGIN
SET @tmp=''
SET @tmp=RTRIM(LTRIM(SUBSTRING(@Value1,1,CHARINDEX(@SPLIT,@Value1)-1)))
--判断与@Value2是否重叠
IF CHARINDEX(','+@tmp+',',','+@Value2+',')<>0
BEGIN
SELECT @Return='Y'
BREAK;
END;
SET @Value1=STUFF(@Value1,1,CHARINDEX(@SPLIT,@Value1),'')
END
--处理无分隔符的数据(或者循环的最后一个数据)
IF @Value1<>'' AND CHARINDEX(','+@Value1+',',','+@Value2+',')<>0
SELECT @Return='Y'
RETURN @Return
END;
//来源:C/S框架网(www.csframework.com) QQ:23404761
参考文档:
CSFramework.EF.PostgreSql数据库组件 PostgreSql数据库测试报告|C/S开发框架
CSFrameworkV6快速开发框架 | 使用PostgreSql 数据库测试报告|C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
SqlServer自动备份计划,备份多个数据库,自动删除备份文件|C/S开发框架
CSFrameworkV6软件开发框架 | MySql数据库测试报告|C/S开发框架
CSFrameworkV6快速开发框架 | SqlServer(MsSql)数据库测试报告|C/S开发框架
CSFrameworkV6软件开发平台主流数据库测试报告(SqlServer/MySql/Oracle/达梦)|C/S开发框架
CSFramework框架数据库备份还原操作手册(MySql/Oracle/SqlServer/达梦)|C/S开发框架
SqlServer(MsSql)数据库备份、还原操作指南|C/S开发框架
MySql数据库备份、还原操作指南|C/S开发框架
MySql MySqlBulkLoader批量导入数据(批导BulkInsert)|C/S开发框架
达梦数据库DmException: 变量空间溢出 [sql]: INSERT INTO,Microsoft.EntityFrameworkCore.DbUpdateException|C/S开发框架
RedGate15|SQLToolbelt Essentials 安装手册|软件下载|C/S开发框架
达梦数据库 | 获取表结构的SQL脚本|C/S开发框架
MySqlConnector.MySqlException:“Loading local data is disabled|C/S开发框架
SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
CSFramework.EF.PostgreSql数据库组件 PostgreSql数据库测试报告|C/S开发框架
CSFrameworkV6快速开发框架 | 使用PostgreSql 数据库测试报告|C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
SqlServer自动备份计划,备份多个数据库,自动删除备份文件|C/S开发框架
CSFrameworkV6软件开发框架 | MySql数据库测试报告|C/S开发框架
CSFrameworkV6快速开发框架 | SqlServer(MsSql)数据库测试报告|C/S开发框架
CSFrameworkV6软件开发平台主流数据库测试报告(SqlServer/MySql/Oracle/达梦)|C/S开发框架
CSFramework框架数据库备份还原操作手册(MySql/Oracle/SqlServer/达梦)|C/S开发框架
SqlServer(MsSql)数据库备份、还原操作指南|C/S开发框架
MySql数据库备份、还原操作指南|C/S开发框架
MySql MySqlBulkLoader批量导入数据(批导BulkInsert)|C/S开发框架
达梦数据库DmException: 变量空间溢出 [sql]: INSERT INTO,Microsoft.EntityFrameworkCore.DbUpdateException|C/S开发框架
RedGate15|SQLToolbelt Essentials 安装手册|软件下载|C/S开发框架
达梦数据库 | 获取表结构的SQL脚本|C/S开发框架
MySqlConnector.MySqlException:“Loading local data is disabled|C/S开发框架
SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
