SQL Server中如何比较非连续子串并求逗号分隔字符串的交集
逗号分隔字符串求交集实现方案
通用实现思路
优先选择「分割后匹配」的方案,避免直接做子串匹配出现的误判(例如abc和abcd这类非预期的部分匹配),步骤如下:
- 分别将两个字符串按逗号分割为独立元素的数组
- 可按需对分割后的元素做去空格、去重处理,适配不同的业务场景
- 求两个数组的交集即为匹配结果,判断交集是否非空即可得到布尔值结果
常用语言代码示例
Python 实现
string1 = "abc,cde,efg" string2 = "abc,efg" # 分割转为集合 set1 = set(string1.split(",")) set2 = set(string2.split(",")) # 计算交集 common_items = list(set1 & set2) # 判断是否存在匹配 has_common = bool(common_items) print(common_items) # 输出:['abc', 'efg'] print(has_common) # 输出:True
JavaScript 实现
const string1 = "abc,cde,efg" const string2 = "abc,efg" const arr1 = string1.split(",") const set2 = new Set(string2.split(",")) // 计算交集 const commonItems = arr1.filter(item => set2.has(item)) // 判断是否存在匹配 const hasCommon = commonItems.length > 0 console.log(commonItems) // 输出:['abc', 'efg'] console.log(hasCommon) // 输出:true
Java 实现
import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class StringIntersectionDemo { public static void main(String[] args) { String string1 = "abc,cde,efg"; String string2 = "abc,efg"; Set<String> set1 = new HashSet<>(Arrays.asList(string1.split(","))); Set<String> set2 = new HashSet<>(Arrays.asList(string2.split(","))); // 计算交集 set1.retainAll(set2); // 判断是否存在匹配 boolean hasCommon = !set1.isEmpty(); System.out.println(set1); // 输出:[abc, efg] System.out.println(hasCommon); // 输出:true } }
模糊子串匹配方案(按需使用)
如果业务要求确实是判断子串包含关系,不需要完全匹配元素,可以参考如下Python示例实现:
string1 = "abcde,cde,efg" string2 = "abc,efg" list1 = string1.split(",") list2 = string2.split(",") # 筛选list1中包含任意list2元素作为子串的内容 common_items = [item for item in list1 if any(sub_str in item for sub_str in list2)] print(common_items) # 输出:['abcde', 'efg']
内容的提问来源于stack exchange,提问作者Muhammad Shahbaz
相关产品推荐
相关产品推荐

