SQL如果两个字符串共享任何字符,则获取TRUE

时间:2016-04-18 12:50:37

标签: sql sql-server-2012 contains string-comparison

我想知道,如果有一个技巧可以获得两个字符串比较的布尔/比特结果,那么如果常见字符之间的 TRUE 值将被返回存在两个字符串。

一个字符串是被授予访问权限的用户列表(即" OTV",存储在用户配置文件中),另一个是有权访问该对象的组列表(即" MDSKTUQ&# 34;,存储在记录中的DB中)。每个字符都是用户组的名称。

在实际SQL查询中,我想返回包含授予用户的任何组的行。类似的东西:

-- Following should display all files attached to record 145
-- to which has the user granted access:
SELECT FileCaption, FileName, FileType, Category FROM DocFiles 
WHERE RecordID = 145 AND CONTAINS(GroupsRead, <<list_of_groups_string>>)

我有一个客户端解决方案,但可行的SQL端解决方案会更整洁,更安全。 评论和讨论表示赞赏。

此致

橡树

1 个答案:

答案 0 :(得分:3)

你在这里 - 压力!

ALTER FUNCTION StringContainsCharactersFrom 
(
    -- Add the parameters for the function here
    @source varchar(100),
    @candidate varchar(100)
)
RETURNS bit
AS
BEGIN

    declare @candidatePos int = 1;
    while (@candidatePos <= len(@candidate))
    BEGIN

        declare @candidateLetter varchar = substring(@candidate, @candidatePos, 1);
        if (CHARINDEX(@candidateLetter,@source, 1) > 0)
            return 1;
        set @candidatePos = @candidatePos + 1;
    END
    return 0;

END
GO