sql - 通过将逗号分隔列表与逗号分隔列表匹配来过滤行
问题描述
我有下表
Col1 Col2
1 ACA,ABS,PHR
2 PHR
3 MCM
4 ABC
现在我想从中过滤数据,所以如果我有一个过滤器参数,'ABS,MCM'
我只想获取至少有一个匹配代码的行。所以在这种情况下,我应该得到过滤结果
Col1 Col2
1 ACA,ABS,PHR
2 MCM
现在我可以使用查询Select * from myTable where Col2 in ('ABS','MCM')
,但它不会检索第一行ACA,ABS,PHR
。有人可以告诉我如何对代码进行文本搜索,只要一个代码在 Col2 中匹配,我就可以得到该行,这样我就可以直接传入分隔列表,只要找到一个匹配项,该行就是取回。
谢谢
解决方案
您可以简单地使用 LIKE 运算符,如下所示:
SELECT *
FROM mytable
WHERE Col2 LIKE '%ABS%' OR Col2 LIKE '%MCM%'
如果您希望接受逗号分隔值作为搜索的输入,则可以使用 STRING_SPLIT()(自 SQL Server 2016 起可用):
SELECT *
FROM mytable t
WHERE EXISTS (
SELECT 1
FROM (SELECT val FROM STRING_SPLIT('ABS, MCM', ',')) x
WHERE CONCAT(',', t.Col1, ',')
LIKE CONCAT('%,', x.val, ',%')
)
推荐阅读
- javascript - 在数组中查找不存在的对象,它返回不一致的值而不是未定义。为什么?
- http - 将传入的 HTTP 响应体读取到 CLI
- reactjs - 在 useEffect() 中使用 useDispatch() 时,似乎不会立即调用操作
- ios - 如何在 Xcode 中运行“调试”?
- r - 根据 R 中的条件替换值
- swift - SceneKit:对 SCNNode 应用多个旋转但保持原始轴不变
- .net-core - 当参数为空或为空时,.NET Core 2.2 删除 /Employees 和 /Employees/EmployeeID 的 WebAPI 路由冲突
- mysql - 为什么以下互惠查询具有不同的性能?
- macos - 在 MAC OS 10.14.5 上修复 m4
- java - 无法使用 FUNC() 解决 JPQL :parameter 问题