SqlServer判断集合A中是否包含集合B

发布时间 2023-06-27 16:42:45作者: LiuJ、

参考:https://www.ccfuns.com/post/36.html

例子:

判断 1,2,3中是否包含9,8,7

 

解决方案:

使用sqlserver标量值函数

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: BoBo
-- Create date: 2019-02-14
-- Description: 某字符串是否包含全部数字集合(使用逗号分隔,可以是字符串)
-- =============================================
ALTER FUNCTION [dbo].[ContainsInts]
(
    @Source NVARCHAR(MAX),
    @Ints NVARCHAR(MAX)
)
RETURNS BIT
AS
BEGIN
    -- =============================================
    IF LEN(ISNULL(@Source,'')) = 0 OR LEN(ISNULL(@Ints,'')) = 0
        RETURN 0
    DECLARE @idx INT=1 -- 逗号索引
    DECLARE @slice NVARCHAR(MAX) -- 分隔的值
    -- =============================================
    WHILE @idx != 0
    BEGIN
        SET @idx = CHARINDEX(',',@Ints)
        IF @idx != 0
            SET @slice = LEFT(@Ints,@idx - 1)
        ELSE
            SET @slice = @Ints
        IF LEN(@slice) > 0 AND CHARINDEX(','+@slice+',',','+@Source+',')>0
            RETURN 1
        SET @Ints = RIGHT(@Ints, LEN(@Ints) - @idx)
        IF LEN(@Ints) = 0
            BREAK
    END
    -- =============================================
    RETURN 0
    -- =============================================
END

测试:

SELECT NTERP.dbo.ContainsInts('1,2,3', '9,8,7')

SELECT NTERP.dbo.ContainsInts('1,2,3', '9,8,7,1')

结果: