在sql中以管道分隔的列中的搜索值

时间:2013-09-12 14:29:52

标签: sql sql-server sql-server-2008 tsql

我想搜索列中以管道分隔的值。见下文。

Column1 
1
1|2|23
2
6
6|12

我想在所有行中搜索2,以便返回行

Column1
1|2|23
2

有人可以告诉我,我们怎样才能做到这一点?

3 个答案:

答案 0 :(得分:6)

您可以使用like

where '|'+column1+'|' like '%|2|%'

通过包含额外的分隔符,您可以避免“2”匹配“23”。

答案 1 :(得分:4)

这样的东西
DECLARE @SearchVal VARCHAR(50) = '2'

SELECT *
FROM YourTable 
WHERE '|' + Column1 + '|' LIKE '%|' + @SearchVal + '|%'

看一下下面的演示

SQL Fiddle DEMO

对于这个解决方案,正如上面所述的@marc_s,这通常是设计出错的最终结果。我会敦促你退后一步,解决问题,因为这只会影响你的表现/善意/理智。更多信息。

答案 2 :(得分:0)

CREATE FUNCTION [dbo].[udf_Split](@string NVARCHAR(MAX), @delimiter CHAR(1)) 
RETURNS @output TABLE(Id INT IDENTITY(1,1), Value NVARCHAR(MAX)) 
BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
            SET @end = LEN(@string) + 1

        INSERT INTO @output (Value)  
        VALUES(SUBSTRING(@string, @start, @end - @start)) 
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start)

    END 
    RETURN 
END

SELECT A.* FROM tbl WHERE '2' IN (SELECT value from dbo.udf_Split(col1, '|'))