Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

сравняване на стойности, разделени със запетая в sql

Това ли търсите?

Вярни/Неверни резултати

-- matches only those values which exist in both CSV sets
SELECT T1.[Item], CASE  WHEN T2.[Item] IS NULL THEN 0 ELSE 1 END AS [Match] 
FROM [dbo].[Split]('val1,val2,val3', ',') AS T1
    LEFT JOIN [dbo].[Split]('val3,val4', ',') AS T2 on T1.[Item] = T2.[Item]

Връщане

Item    Match
val1    0
val2    0
val3    1

Само истински съвпадения

-- matches only those values which exist in both CSV sets
SELECT T1.[Item] 
FROM [dbo].[Split]('val1,val2,val3', ',') AS T1
    INNER JOIN [dbo].[Split]('val3,val4', ',') AS T2 on T1.[Item] = T2.[Item]

Връщане

Item
val3

Разделна функция

CREATE FUNCTION [dbo].[Split] 
(   
    @s VARCHAR(max),
    @split CHAR(1)
)
RETURNS @temptable TABLE ([Item] VARCHAR(MAX))    
AS
BEGIN
    DECLARE @x XML

    SELECT @x = CONVERT(xml,'<root><s>' + REPLACE(@s,@split,'</s><s>') + '</s></root>');

    INSERT INTO @temptable          
    SELECT [Value] = T.c.value('.','varchar(20)')
    FROM @X.nodes('/root/s') T(c);
RETURN
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL изберете във Temp таблица от динамичен sql

  2. Sql сървърът не актуализира записи

  3. Трябва ли да използвам !=или <> за не е равно в T-SQL?

  4. LEN() срещу DATALENGTH() в SQL Server

  5. Свързване на приложения, работещи на Linux, към Amazon Relational Database Services (RDS) за SQL Server