首页 > 解决方案 > SQL Server 用逗号分隔列中的字符串,并在不使用拆分方法的情况下搜索值,并且检查应该是 AND 而不是 OR

问题描述

我在一列中有逗号分隔的字符串值。 示例"WX,AB,XYZ", "WX,CD,NY" 现在在 sql 中如果我收到 "WX,XYZ" 它应该返回 "WX,AB,XYZ" 而不是 "WX,CD,NY"。基本上是逗号分隔值之间的 AND 比较。PS:由于性能问题,我不能使用拆分方法。

标签: sql

解决方案


逗号分隔的字符串是一个非常糟糕的主意。你应该重新审视你的设计。但是,如果您被其他人非常非常糟糕的设计决定所困扰,那么您可以使用string_split()(至少在 SQL Server 的更新版本中):

select t.*
from t
where (select count(*)
       from split_string(t.col, ',') s1 join
            split_string(@input, ',') s2
            on s1.value = s2.value
      ) = (select count(*) from split_string(@input, ','));

此公式假定所有字符串都没有重复值。


推荐阅读