查找以逗号分隔的子字符串匹配

时间:2014-09-10 07:40:33

标签: sql sql-server split

我有一个表“user”,它有一个col“access”,其中多个值用逗号分隔。 我有另一个表“代码”,其中有一列“SCRCODES”,其中一些用户代码为单值。 所以我需要检查表“user”的col“access”中的多个值是否具有表“codes”的“SCRCODES”列中的任何值

有人请就此提出建议。 感谢

2 个答案:

答案 0 :(得分:0)

我认为这会对你有所帮助:

 ALTER FUNCTION [dbo].[Split]
        (
          @RowData NVARCHAR(MAX) ,
          @SplitOn NVARCHAR(5)
        )
    RETURNS @ReturnValue TABLE ( Data NVARCHAR(MAX) )
    AS 
        BEGIN
            DECLARE @Counter INT
            SET @Counter = 1 
            WHILE ( CHARINDEX(@SplitOn, @RowData) > 0 ) 
                BEGIN  
                    INSERT  INTO @ReturnValue
                            ( data
                            )
                            SELECT  Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1,
                                                                 CHARINDEX(@SplitOn,
                                                                  @RowData) - 1)))
                    SET @RowData = SUBSTRING(@RowData,
                                             CHARINDEX(@SplitOn, @RowData) + 1,
                                             LEN(@RowData)) 
                    SET @Counter = @Counter + 1  
                END 
            INSERT  INTO @ReturnValue
                    ( data )
                    SELECT  Data = LTRIM(RTRIM(@RowData))  
            RETURN  
        END;

    GO

    DECLARE @str VARCHAR(MAX)
    SET @str = select access from users where oid = "1"
    SELECT *
    FROM codes c, users u where c.SCRCODES in dbo.Split(@str, ',')

答案 1 :(得分:0)

我假设你的sercodes不包含逗号。

您可以这样做:

select sercodes from codes
inner join users
on user.codeid = codes.codeid
where charindex(sercodes + ',', access) > 0 or charindex(',' + sercodes , access) > 0

这个想法是访问将以这种方式存储"读,写,执行"。因此,它将以逗号结尾或以逗号开头并且是字符串的一部分..

请告诉我它是否有效。您可以提供实际的表格数据和设计,以获得更准确的查询。