搜索拆分字段的值

时间:2014-08-12 16:07:42

标签: sql-server sql-server-2012

我有一个包含多个外键的字段,我需要搜索给定的值。

admin_ids :: 24,56,78

如何搜索该字段并获得以下结果: 24 = true; 6 = false; 7 = false

我无法更改架构。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我过去所做的是创建一个表值函数,将字符串拆分为不同的值,前提是它们由相同的...分隔符分隔。

网上有例子,例如: http://www.sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/09/19/how-to-split-a-string-by-delimited-char-in-sql-server/

这是一个示例,转换为脚本:

DECLARE   
    @Data NVARCHAR(MAX) = '24,56,78',
    @Delimeter NVARCHAR(MAX) = ','

DECLARE @Values TABLE (ID INT IDENTITY(1,1), Data NVARCHAR(MAX)) 
DECLARE @Users  TABLE (ID INT)
INSERT INTO @Users (ID)
VALUES (1),(6),(7),(24),(30),(56)

DECLARE @Iterator INT
SET @Iterator = 1

DECLARE @FoundIndex INT
SET @FoundIndex = CHARINDEX(@Delimeter,@Data)

WHILE (@FoundIndex>0)
BEGIN
    INSERT INTO @Values (data)
    SELECT 
        Data = LTRIM(RTRIM(SUBSTRING(@Data, 1, @FoundIndex - 1)))
    SET @Data = SUBSTRING(@Data,
            @FoundIndex + DATALENGTH(@Delimeter) / 2,
            LEN(@Data))
    SET @Iterator = @Iterator + 1
    SET @FoundIndex = CHARINDEX(@Delimeter, @Data)
END
INSERT INTO @Values (Data)
SELECT Data = LTRIM(RTRIM(@Data))

SELECT
    usr.ID,
    CASE ISNULL(val.Data, -1)
        WHEN -1 THEN 'False'
        ELSE 'True'
    END
FROM @Users usr
    LEFT JOIN @Values val ON val.Data = usr.ID

希望这足以让你开始,如果TVF是你想去的方式:)

P.S。有很多方法可以做到这一点,我确信有些方法比提供的方法更好..这个工作,如果字段只有varchar(255),那么效率应该没问题。