检查逗号分隔字符串中的项之一是否存在于另一个逗号分隔的字符串中

时间:2018-03-09 21:16:27

标签: sql-server csv tsql

我可以用逗号分隔的字符串检查单个字符串,例如查找包含单个值的varchar数据字段,例如1 or 2 or 5逗号分隔字符串中的'1,2,3,4,5',如下所述:https://stackoverflow.com/a/49202026/1830909,但是我想知道如何检查比较字符串是不是单个实心字符串,也是逗号分隔字符串。例如,数据字段是varchar和容器逗号分隔的字符串,如'1,3,4',我想检查一个项目,如1或3或4是否存在于' 1,2,3,4,5'逗号分隔的字符串中,I希望成功澄清,任何帮助表示赞赏。

  

澄清: 虽然"在列中保留分隔的字符串很糟糕   想法"但是我认为当最大值只包含时,这并不重要   少于15项,在某些情况下我有太多的桌子,我不会   想增加。其他原因是喜欢使用json进行转移   data,将所有值解析为一个分隔的字符串并保存为一个   DB表的列,并将其作为字符串汇集到DB,并将其汇总到   不同的价值观。

1 个答案:

答案 0 :(得分:2)

您需要一个字符串拆分器(AKA tokenizer)。在SQL 2016+中,您可以在2016年之前使用string_split我建议DelimitedSplit8K。此代码返回1是否有匹配值,否则为0。

DECLARE 
  @string1 varchar(100) = '1,32,2',
  @string2 varchar(100) = '1,2,3,4,5';

SELECT matchingValue = ISNULL(MAX(1),0)
FROM string_split(@string1,',')
WHERE [value] IN (SELECT [value] FROM string_split(@string2,','));