how to select data row from a comma separated value field(如何从逗号分隔值字段中选择数据行)
本文介绍了如何从逗号分隔值字段中选择数据行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题与此问题不完全相似
How to SELECT parts from a comma-separated field with a LIKE statement
但我在那里没有看到任何答案。因此,我再次发布我的问题。
我有下表
╔════════════╦═════════════╗
║ VacancyId ║ Media ║
╠════════════╬═════════════╣
║ 1 ║ 32,26,30 ║
║ 2 ║ 31, 25,20 ║
║ 3 ║ 21,32,23 ║
╚════════════╩═════════════╝
我要选择介质ID=30、介质=21或介质=40的数据
所以在本例中,输出将返回第一行和第三行。
我如何才能做到这一点?
我尝试了像‘30’这样的媒体,但没有返回任何值。另外,我只需要在该字段中搜索一个字符串。
我的数据库是SQL Server
谢谢
推荐答案
如果可行,使用逗号分隔值存储在数据库中从来都不好,请尝试创建单独的表来存储它们,因为这很可能是1:n关系。
Like语句系列和OR/AND语句。
例如-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
但是,上面的查询可能会捕获包含21的所有值,因此即使值为1210、210的列也会返回。要克服这个问题,您可以使用以下技巧,这会影响性能,因为它使用where子句中的函数,这不利于进行Seargable查询。
但它开始了
--Declare valueSearch variable first to value to match for you can do this for multiple values using multiple variables.
Declare @valueSearch = '21'
-- Then do the matching in where clause
WHERE
(',' + RTRIM(Media) + ',') LIKE '%,' + @valueSearch + ',%'
如果要更改要匹配的值的数量,那么您可能需要查看FullText Index,并且应该考虑同样的问题。
如果您在Fulltext Index之后决定使用此选项,您可以执行以下操作以获得您想要的内容,
例如-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')
这篇关于如何从逗号分隔值字段中选择数据行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何从逗号分隔值字段中选择数据行
基础教程推荐
猜你喜欢
- 带有WHERE子句的LAG()函数 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
