IN 语句中的逗号分隔值 (SQL)

Comma separated values In An IN statement (SQL)

我有一个 table,其中包含一列逗号分隔值, 我想将它们作为不同的值并放在另一个 select 语句的 In 子句中。我试过交叉应用,但没能正常工作

table (T1) 看起来像:

Empcode Eid Unitcodes
007645  164 UNT111$UNT112$UNT113$
000645  162 UNT100$UNT102$UNT20$UNT97$UNT98$UNT99$UNT136$
002585  163 UNT25$UNT39$
003059  180 UNT76$                                                                                              
000559  165 UNT109$UNT114$UNT166$UNT27$UNT60$UNT103$UNT58$
003049  175 UNT106$UNT54$UNT86$UNT87$UNT130$UNT131$UNT132$
003049  177 UNT51$UNT56$UNT91$UNT92$                                                                            

我需要一个类似这样的查询:

select * from T2 where empcode='abcd' unitcode in ('UNT111','UNT112','UNT113') 
//only that particular emps Unitcodes from the table T1

试试这个

select * from T2 where empcode='abcd' unitcode in ('%UNT111%','%UNT112%','%UNT113%') 

创建函数:此函数将拆分您的值

  Create FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter          varchar(20))
   RETURNS @Strings TABLE
  (   
     position int IDENTITY PRIMARY KEY,
     value varchar(8000)  
    )
  AS
  BEGIN

  DECLARE @index int
  SET @index = -1

      WHILE (LEN(@text) > 0)
     BEGIN 
   SET @index = CHARINDEX(@delimiter , @text) 
  IF (@index = 0) AND (LEN(@text) > 0) 
   BEGIN  
INSERT INTO @Strings VALUES (@text)
  BREAK 
END 
  IF (@index > 1) 
 BEGIN  
  INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  
  SET @text = RIGHT(@text, (LEN(@text) - @index)) 
 END 
ELSE
 SET @text = RIGHT(@text, (LEN(@text) - @index))
END
 RETURN
 END

然后写下您的查询

select * from T2 where empcode='abcd' unitcode in (fn_Split("yourcomma seprated column",',')

您可以按照以下方式进行:

查询

SELECT * 
FROM #test2
WHERE ID IN (
            SELECT LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Unitcodes
            FROM
                (
                SELECT CAST('<XMLRoot><RowData>' + REPLACE(Unitcodes,'$','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
                FROM   #test
                )t
            CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)
            )

示例数据

CREATE TABLE #test
(
   Empcode INT, 
   Eid INT,
   Unitcodes NVARCHAR(MAX)
)
INSERT INTO #test VALUES                                                                                           
(000559,  165, 'UNT109$UNT114$UNT166$UNT27$UNT60$UNT103$UNT58$'),
(003049,  175, 'UNT106$UNT54$UNT86$UNT87$UNT130$UNT131$UNT132$')

CREATE TABLE #test2
(
   ID NVARCHAR(MAX)
)

INSERT INTO #test2 VALUES
('UNT54'),('UNT130'),('UNT999')

输出

ID
UNT54
UNT130