【发布时间】:2019-11-26 20:56:29
【问题描述】:
我有一列具有类似'Blood work;MRI;ICC' 的值,它可以是一个字符串,其中一些单词由';' 分隔。
我想知道like 子句,当您搜索'Blood work'、'mri'、'icc' 而不是'blood' 或'mr' 或@987654329 时,我如何进行查询以返回结果@?
【问题讨论】:
标签: sql sql-server csv tsql
我有一列具有类似'Blood work;MRI;ICC' 的值,它可以是一个字符串,其中一些单词由';' 分隔。
我想知道like 子句,当您搜索'Blood work'、'mri'、'icc' 而不是'blood' 或'mr' 或@987654329 时,我如何进行查询以返回结果@?
【问题讨论】:
标签: sql sql-server csv tsql
要在 CSV 列表中搜索字段,一种方法是:
where ';' + mycol + ';' like '%;mri;%'
with
csv as (select 'Blood work;MRI;ICC' v),
match as (select 'mri' m union all select 'Blood work' union all select 'Blood')
select csv.v, match.m,
case when ';' + csv.v + ';' like '%;' + match.m + ';%'
then 'match'
else 'no match'
end matched
from csv
cross join match
v |米 |匹配的
:----------------- | :--------- | :--------
血液检查;MRI;ICC |核磁共振 |匹配
血液检查;MRI;ICC |血液工作 |匹配
血液检查;MRI;ICC |血 |不匹配
【讨论】:
我个人会使用字符串拆分器:
SELECT {Columns}
FROM dbo.YourTable YT
CROSS APPLY STRING_SPLIT (YT.YourColumn,';') SS
WHERE SS.[Value] = 'mri';
如果您没有使用 SQL Sevrer 2016+,那么您可以使用自定义拆分器,例如 DelimitedSplit8K_LEAD。
【讨论】: